perf stat: Do not print ratio when task-clock event is not counted
authorLucas De Marchi <lucas.de.marchi@gmail.com>
Sun, 15 Nov 2009 14:05:08 +0000 (12:05 -0200)
committerIngo Molnar <mingo@elte.hu>
Sun, 15 Nov 2009 14:25:50 +0000 (15:25 +0100)
The ratio between the number of events and the time elapsed makes
sense only if task-clock event is counted. Otherwise it will be
simply a (confusing)

#      0.000 M/sec

This patch outputs the ratio only if task-clock event is counted.
Some test examples of before and after:

Before:

 [lucas@skywalker linux.trees.git]$ sudo perf stat -e branch-misses -a -- sleep 1

 Performance counter stats for 'sleep 1':

1367818  branch-misses            #      0.000 M/sec

    1.001494325  seconds time elapsed

After (without task-clock):

 [lucas@skywalker perf]$ sudo ./perf stat -e branch-misses -a -- sleep 1

 Performance counter stats for 'sleep 1':

1135044  branch-misses

    1.001370775  seconds time elapsed

After (with task-clock):

 [lucas@skywalker perf]$ sudo ./perf stat -e branch-misses -e task-clock -a -- sleep 1

 Performance counter stats for 'sleep 1':

1070111  branch-misses            #      0.534 M/sec
    2002.730893  task-clock-msecs         #      1.999 CPUs

    1.001640292  seconds time elapsed

Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <20091115140507.GB21561@skywalker.lan>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
tools/perf/builtin-stat.c

index c6df3770b87e7e69e674cad999b09318394b0478..c70d72003557f17f29345b0f219dc5ca9f572d75 100644 (file)
@@ -357,7 +357,8 @@ static void abs_printout(int counter, double avg)
                        ratio = avg / total;
 
                fprintf(stderr, " # %10.3f IPC  ", ratio);
-       } else if (MATCH_EVENT(HARDWARE, HW_BRANCH_MISSES, counter)) {
+       } else if (MATCH_EVENT(HARDWARE, HW_BRANCH_MISSES, counter) &&
+                       runtime_branches_stats.n != 0) {
                total = avg_stats(&runtime_branches_stats);
 
                if (total)
@@ -365,7 +366,7 @@ static void abs_printout(int counter, double avg)
 
                fprintf(stderr, " # %10.3f %%    ", ratio);
 
-       } else {
+       } else if (runtime_nsecs_stats.n != 0) {
                total = avg_stats(&runtime_nsecs_stats);
 
                if (total)