Files
linux/kernel
Steven Rostedt (VMware) d45ae1f704 tracing: Process constants for (un)likely() profiler
When running the likely/unlikely profiler, one of the results did not look
accurate. It noted that the unlikely() in link_path_walk() was 100%
incorrect. When I added a trace_printk() to see what was happening there, it
became 80% correct! Looking deeper into what whas happening, I found that
gcc split that if statement into two paths. One where the if statement
became a constant, the other path a variable. The other path had the if
statement always hit (making the unlikely there, always false), but since
the #define unlikely() has:

  #define unlikely() (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0))

Where constants are ignored by the branch profiler, the "constant" path
made by the compiler was ignored, even though it was hit 80% of the time.

By just passing the constant value to the __branch_check__() function and
tracing it out of line (as always correct, as likely/unlikely isn't a factor
for constants), then we get back the accurate readings of branches that were
optimized by gcc causing part of the execution to become constant.

Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
2017-01-17 15:13:05 -05:00
..
2016-12-25 17:21:22 +01:00
2016-12-25 17:21:22 +01:00
2015-11-19 17:51:48 +01:00
2016-11-25 16:25:52 -05:00
2016-12-26 17:30:24 -08:00
2016-12-25 17:21:22 +01:00
2015-11-23 09:44:58 +01:00
2016-12-12 18:55:06 -08:00
2016-02-16 13:04:58 -05:00
2016-05-27 15:26:11 -07:00
2016-12-25 17:21:22 +01:00
2016-03-01 20:36:56 +01:00
2016-12-22 22:58:37 -05:00
2016-09-22 20:00:36 -05:00