aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2009-10-18 07:29:23 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-19 03:20:21 -0400
commit11018201b831e19304c0d639f105ad6c27e120b1 (patch)
tree531051de316cdf54b8193d11fb843d7432419d2c
parentf39cdf25bf77219676ec5360980ac40b1a7e144a (diff)
perf stat: Add branch performance metric
When we count both branches and branch-misses it is useful to print out the percentage of branch-misses: # perf stat -e branches -e branch-misses /bin/true Performance counter stats for '/bin/true': 401684 branches # 0.000 M/sec 23301 branch-misses # 5.801 % Signed-off-by: Anton Blanchard <anton@samba.org> Cc: paulus@samba.org Cc: a.p.zijlstra@chello.nl LKML-Reference: <20091018112923.GQ4808@kryten> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--tools/perf/builtin-stat.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 3db31e7bf173..c37368343fff 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -125,6 +125,7 @@ struct stats event_res_stats[MAX_COUNTERS][3];
125struct stats runtime_nsecs_stats; 125struct stats runtime_nsecs_stats;
126struct stats walltime_nsecs_stats; 126struct stats walltime_nsecs_stats;
127struct stats runtime_cycles_stats; 127struct stats runtime_cycles_stats;
128struct stats runtime_branches_stats;
128 129
129#define MATCH_EVENT(t, c, counter) \ 130#define MATCH_EVENT(t, c, counter) \
130 (attrs[counter].type == PERF_TYPE_##t && \ 131 (attrs[counter].type == PERF_TYPE_##t && \
@@ -235,6 +236,8 @@ static void read_counter(int counter)
235 update_stats(&runtime_nsecs_stats, count[0]); 236 update_stats(&runtime_nsecs_stats, count[0]);
236 if (MATCH_EVENT(HARDWARE, HW_CPU_CYCLES, counter)) 237 if (MATCH_EVENT(HARDWARE, HW_CPU_CYCLES, counter))
237 update_stats(&runtime_cycles_stats, count[0]); 238 update_stats(&runtime_cycles_stats, count[0]);
239 if (MATCH_EVENT(HARDWARE, HW_BRANCH_INSTRUCTIONS, counter))
240 update_stats(&runtime_branches_stats, count[0]);
238} 241}
239 242
240static int run_perf_stat(int argc __used, const char **argv) 243static int run_perf_stat(int argc __used, const char **argv)
@@ -352,6 +355,14 @@ static void abs_printout(int counter, double avg)
352 ratio = avg / total; 355 ratio = avg / total;
353 356
354 fprintf(stderr, " # %10.3f IPC ", ratio); 357 fprintf(stderr, " # %10.3f IPC ", ratio);
358 } else if (MATCH_EVENT(HARDWARE, HW_BRANCH_MISSES, counter)) {
359 total = avg_stats(&runtime_branches_stats);
360
361 if (total)
362 ratio = avg * 100 / total;
363
364 fprintf(stderr, " # %10.3f %% ", ratio);
365
355 } else { 366 } else {
356 total = avg_stats(&runtime_nsecs_stats); 367 total = avg_stats(&runtime_nsecs_stats);
357 368