From d7c29318c2daa96d64b7312afd8283488c1cb29f Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Sat, 30 May 2009 12:38:51 +0200 Subject: [PATCH] perf_counter tools: Print 'CPU utilization factor' in builtin-stat Before: Performance counter stats for '/home/mingo/hackbench': 5728.862689 task clock ticks (msecs) 34426 context switches # 0.006 M/sec 3835 CPU migrations # 0.001 M/sec 18158 pagefaults # 0.003 M/sec 16218109156 CPU cycles # 2830.947 M/sec 13519616840 instructions # 2359.913 M/sec 55941661 cache references # 9.765 M/sec 23554938 cache misses # 4.112 M/sec Wall-clock time elapsed: 528.886980 msecs After: Performance counter stats for '/home/mingo/hackbench': 5845.443541 task clock ticks # 11.886 CPU utilization factor 38289 context switches # 0.007 M/sec 4208 CPU migrations # 0.001 M/sec 17755 pagefaults # 0.003 M/sec 16664668576 CPU cycles # 2850.882 M/sec 13468113991 instructions # 2304.036 M/sec 57445468 cache references # 9.827 M/sec 26896502 cache misses # 4.601 M/sec Wall-clock time elapsed: 491.802357 msecs Cc: Peter Zijlstra Cc: Mike Galbraith Cc: Paul Mackerras Cc: Corey Ashford Cc: Marcelo Tosatti Cc: Arnaldo Carvalho de Melo Cc: John Kacur LKML-Reference: Signed-off-by: Ingo Molnar --- Documentation/perf_counter/builtin-stat.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Documentation/perf_counter/builtin-stat.c b/Documentation/perf_counter/builtin-stat.c index ef7e0e1192c..588679167c8 100644 --- a/Documentation/perf_counter/builtin-stat.c +++ b/Documentation/perf_counter/builtin-stat.c @@ -75,6 +75,7 @@ static __u64 event_res[MAX_COUNTERS][3]; static __u64 event_scaled[MAX_COUNTERS]; static __u64 runtime_nsecs; +static __u64 walltime_nsecs; static void create_perfstat_counter(int counter) { @@ -194,13 +195,19 @@ static void print_counter(int counter) if (nsec_counter(counter)) { double msecs = (double)count[0] / 1000000; - fprintf(stderr, " %14.6f %-20s (msecs)", + fprintf(stderr, " %14.6f %-20s", msecs, event_name(counter)); + if (event_id[counter] == + EID(PERF_TYPE_SOFTWARE, PERF_COUNT_TASK_CLOCK)) { + + fprintf(stderr, " # %11.3f CPU utilization factor", + (double)count[0] / (double)walltime_nsecs); + } } else { fprintf(stderr, " %14Ld %-20s", count[0], event_name(counter)); if (runtime_nsecs) - fprintf(stderr, " # %12.3f M/sec", + fprintf(stderr, " # %11.3f M/sec", (double)count[0]/runtime_nsecs*1000.0); } if (scaled) @@ -241,6 +248,8 @@ static int do_perfstat(int argc, const char **argv) prctl(PR_TASK_PERF_COUNTERS_DISABLE); t1 = rdclock(); + walltime_nsecs = t1 - t0; + fflush(stdout); fprintf(stderr, "\n");