perf stat: Print branch misses warning colors
Commit-ID: c78df6c1d49b5d798f1579141e3a12be7c325d1e Gitweb: http://git.kernel.org/tip/c78df6c1d49b5d798f1579141e3a12be7c325d1e Author: Ingo Molnar <[email protected]> AuthorDate: Wed, 27 Apr 2011 12:16:10 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Tue, 26 Apr 2011 20:04:58 +0200
perf stat: Print branch misses warning colors
Print the missed-branches percentage with different warning level ASCII colors, as the percentage passes the 5%/10%/20% thresholds.
These thresholds are set to relatively low levels, because on most CPUs even a moderate percentage of branch-misses already shows up as a slowdown.
Acked-by Peter Zijlstra <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- tools/perf/builtin-stat.c | 31 ++++++++++++++++++++++++------- 1 files changed, 24 insertions(+), 7 deletions(-)
tools/perf/builtin-stat.c +24 -7
@@ -450,6 +450,29 @@ static void print_stalled_cycles(int cpu, struct perf_evsel *evsel __used, doublfprintf (stderr," of all cycles are idle " ); } +static void print_branch_misses (int cpu,struct perf_evsel *evsel__used ,double avg) +{ +double total, ratio =0.0 ; +const char *color; + + total =avg_stats (&runtime_branches_stats[cpu]); + +if (total) + ratio = avg / total *100.0 ; + + color =PERF_COLOR_NORMAL ; +if (ratio >20.0 ) + color =PERF_COLOR_RED ; +else if (ratio >10.0 ) + color =PERF_COLOR_MAGENTA ; +else if (ratio >5.0 ) + color =PERF_COLOR_YELLOW ; + +fprintf (stderr," # " ); +color_fprintf (stderr, color,"%5.2f%%" , ratio); +fprintf (stderr," of all branches " ); +} +static void abs_printout (int cpu,struct perf_evsel *evsel,double avg) {double total, ratio =0.0 ;
@@ -495,13 +518,7 @@ static void abs_printout(int cpu, struct perf_evsel *evsel, double avg) }else if (perf_evsel__match (evsel,HARDWARE ,HW_BRANCH_MISSES ) && runtime_branches_stats[cpu].n !=0 ) { - total =avg_stats (&runtime_branches_stats[cpu]); - -if (total) - ratio = avg *100 / total; - -fprintf (stderr," # %5.2f %% of all branches " , ratio); - +print_branch_misses (cpu, evsel, avg); }else if (perf_evsel__match (evsel,HARDWARE ,HW_CACHE_MISSES ) && runtime_cacherefs_stats[cpu].n !=0 ) { total =avg_stats (&runtime_cacherefs_stats[cpu]);