perf stat: Print cache misses as percentage
Commit-ID: d58f4c82fed69fdd4a79fa54fe17fd14d98c27aa Gitweb: http://git.kernel.org/tip/d58f4c82fed69fdd4a79fa54fe17fd14d98c27aa Author: Ingo Molnar <[email protected]> AuthorDate: Wed, 27 Apr 2011 03:42:18 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 26 Apr 2011 20:04:54 +0200
perf stat: Print cache misses as percentage
Before:
113,393,041 cache-references # 83.636 M/sec
7,052,454 cache-misses # 5.202 M/secAfter:
112,589,441 cache-references # 87.925 M/sec
6,556,354 cache-misses # 5.823 %misses/hits percentages are more expressive than absolute numbers or rates.
(Also prettify the CPUs printout line to not have a trailing whitespace.)
Acked-by Peter Zijlstra <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- tools/perf/builtin-stat.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-)
tools/perf/builtin-stat.c +15 -3
@@ -157,6 +157,7 @@ static double stddev_stats(struct stats *stats)struct stats runtime_nsecs_stats[MAX_NR_CPUS ];struct stats runtime_cycles_stats[MAX_NR_CPUS ];struct stats runtime_branches_stats[MAX_NR_CPUS ]; +struct stats runtime_cacherefs_stats[MAX_NR_CPUS ];struct stats walltime_nsecs_stats;static int create_perf_stat_counter (struct perf_evsel *evsel)
@@ -219,10 +220,12 @@ static int read_counter_aggr(struct perf_evsel *counter)*/ if (perf_evsel__match (counter,SOFTWARE ,SW_TASK_CLOCK ))update_stats (&runtime_nsecs_stats[0 ], count[0 ]); -if (perf_evsel__match (counter,HARDWARE ,HW_CPU_CYCLES )) +else if (perf_evsel__match (counter,HARDWARE ,HW_CPU_CYCLES ))update_stats (&runtime_cycles_stats[0 ], count[0 ]); -if (perf_evsel__match (counter,HARDWARE ,HW_BRANCH_INSTRUCTIONS )) +else if (perf_evsel__match (counter,HARDWARE ,HW_BRANCH_INSTRUCTIONS ))update_stats (&runtime_branches_stats[0 ], count[0 ]); +else if (perf_evsel__match (counter,HARDWARE ,HW_CACHE_REFERENCES )) +update_stats (&runtime_cacherefs_stats[0 ], count[0 ]);return 0 ; }
@@ -404,7 +407,7 @@ static void nsec_printout(int cpu, struct perf_evsel *evsel, double avg)return ;if (perf_evsel__match (evsel,SOFTWARE ,SW_TASK_CLOCK )) -fprintf (stderr," # %10.3f CPUs " , +fprintf (stderr," # %10.3f CPUs" , avg /avg_stats (&walltime_nsecs_stats)); }
@@ -452,6 +455,15 @@ static void abs_printout(int cpu, struct perf_evsel *evsel, double avg)fprintf (stderr," # %10.3f %%" , ratio); + }else if (perf_evsel__match (evsel,HARDWARE ,HW_CACHE_MISSES ) && + runtime_cacherefs_stats[cpu].n !=0 ) { + total =avg_stats (&runtime_cacherefs_stats[cpu]); + +if (total) + ratio = avg *100 / total; + +fprintf (stderr," # %10.3f %%" , ratio); + }else if (runtime_nsecs_stats[cpu].n !=0 ) { total =avg_stats (&runtime_nsecs_stats[cpu]);