perf, tools: Output running time and run/enabled ratio in CSV mode
PATCH 1/1 perf, tools: Output running time and run/enabled ratio in CSV mode
From: Andi Kleen <[email protected]>
The information how much a counter ran in perf stat can be quite interesting for other tools to judge how trustworthy a measurement is.
Currently it is only output in non CSV mode.
This patches make perf stat always output the running time and the enabled/running ratio in CSV mode.
This adds two new fields at the end for each line. I assume that existing tools ignore new fields at the end, so it's on by default.
Only CSV mode is affected, no difference otherwise.
v2: Add extra print_running function
v3: Avoid printing nan
v4: Remove some elses and add brackets.
v5: Move non CSV case into print_running
--- tools/perf/builtin-stat.c | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-)
tools/perf/builtin-stat.c +24 -23
@@ -769,6 +769,18 @@ static int run_perf_stat(int argc, const char **argv)return ret; } +static void print_running (u64 run,u64 ena) +{ +if (csv_output) { +fprintf (output,"%s%" PRIu64"%s%.2f" , + csv_sep, + run, + csv_sep, + ena ?100.0 * run / ena :100.0 ); + }else if (run != ena) +fprintf (output," (%.2f%%)" ,100.0 * run / ena); +} +static void print_noise_pct (double total,double avg) {double pct =rel_stddev_stats (total, avg);
@@ -1252,6 +1264,7 @@ static void print_aggr(char *prefix)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (run, ena);fputc ('\n' , output);continue ; }
@@ -1262,13 +1275,10 @@ static void print_aggr(char *prefix)else abs_printout (id, nr, counter, uval); -if (!csv_output) { +if (!csv_output)print_noise (counter,1.0 ); -if (run != ena) -fprintf (output," (%.2f%%)" , -100.0 * run / ena); - } +print_running (run, ena);fputc ('\n' , output); } }
@@ -1284,6 +1294,10 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)double avg =avg_stats (&ps->res_stats[0 ]);int scaled = counter->counts->scaled;double uval; +double avg_enabled, avg_running; + + avg_enabled =avg_stats (&ps->res_stats[1 ]); + avg_running =avg_stats (&ps->res_stats[2 ]);if (prefix)fprintf (output,"%s" , prefix);
@@ -1303,6 +1317,7 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)if (counter->cgrp)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (avg_running, avg_enabled);fputc ('\n' , output);return ; }
@@ -1316,19 +1331,7 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)print_noise (counter, avg); -if (csv_output) { -fputc ('\n' , output); -return ; - } - -if (scaled) { -double avg_enabled, avg_running; - - avg_enabled =avg_stats (&ps->res_stats[1 ]); - avg_running =avg_stats (&ps->res_stats[2 ]); - -fprintf (output," [%5.2f%%]" ,100 * avg_running / avg_enabled); - } +print_running (avg_running, avg_enabled);fprintf (output,"\n" ); }
@@ -1370,6 +1373,7 @@ static void print_counter(struct perf_evsel *counter, char *prefix)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (run, ena);fputc ('\n' , output);continue ; }
@@ -1381,13 +1385,10 @@ static void print_counter(struct perf_evsel *counter, char *prefix)else abs_printout (cpu,0 , counter, uval); -if (!csv_output) { +if (!csv_output)print_noise (counter,1.0 ); +print_running (run, ena); -if (run != ena) -fprintf (output," (%.2f%%)" , -100.0 * run / ena); - }fputc ('\n' , output); } }
Signature · 1 line
1.9.3
Quoted 13 lines · Andi Kleen
From: Andi Kleen <[email protected]>
The information how much a counter ran in perf stat can be quite interesting for other tools to judge how trustworthy a measurement is.
Currently it is only output in non CSV mode.
This patches make perf stat always output the running time and the enabled/running ratio in CSV mode.
This adds two new fields at the end for each line. I assume that existing tools ignore new fields at the end, so it's on by default.
Quoted 8 lines
Only CSV mode is affected, no difference otherwise.
v2: Add extra
print_runningfunction
v3: Avoid printing nan
v4: Remove some elses and add brackets.
v5: Move non CSV case intoprint_runningReviewed-by Jiri Olsa <[email protected]>Signed-off-by Andi Kleen <[email protected]>
Thanks,
Namhyung
Quoted 123 lines
--- tools/perf/builtin-stat.c | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-)tools/perf/builtin-stat.c +24
-23@@ -769,6 +769,18 @@ static int run_perf_stat(int argc, const char **argv)return ret; } +static void print_running (u64 run,u64 ena) +{ +if (csv_output) { +fprintf (output,"%s%" PRIu64"%s%.2f" , + csv_sep, + run, + csv_sep, + ena ?100.0 * run / ena :100.0 ); + }else if (run != ena) +fprintf (output," (%.2f%%)" ,100.0 * run / ena); +} +static void print_noise_pct (double total,double avg) {double pct =rel_stddev_stats (total, avg);@@ -1252,6 +1264,7 @@ static void print_aggr(char *prefix)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (run, ena);fputc ('\n' , output);continue ; }@@ -1262,13 +1275,10 @@ static void print_aggr(char *prefix)else abs_printout (id, nr, counter, uval); -if (!csv_output) { +if (!csv_output)print_noise (counter,1.0 ); -if (run != ena) -fprintf (output," (%.2f%%)" , -100.0 * run / ena); - } +print_running (run, ena);fputc ('\n' , output); } }@@ -1284,6 +1294,10 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)double avg =avg_stats (&ps->res_stats[0 ]);int scaled = counter->counts->scaled;double uval; +double avg_enabled, avg_running; + + avg_enabled =avg_stats (&ps->res_stats[1 ]); + avg_running =avg_stats (&ps->res_stats[2 ]);if (prefix)fprintf (output,"%s" , prefix);@@ -1303,6 +1317,7 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)if (counter->cgrp)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (avg_running, avg_enabled);fputc ('\n' , output);return ; }@@ -1316,19 +1331,7 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)print_noise (counter, avg); -if (csv_output) { -fputc ('\n' , output); -return ; - } - -if (scaled) { -double avg_enabled, avg_running; - - avg_enabled =avg_stats (&ps->res_stats[1 ]); - avg_running =avg_stats (&ps->res_stats[2 ]); - -fprintf (output," [%5.2f%%]" ,100 * avg_running / avg_enabled); - } +print_running (avg_running, avg_enabled);fprintf (output,"\n" ); }@@ -1370,6 +1373,7 @@ static void print_counter(struct perf_evsel *counter, char *prefix)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (run, ena);fputc ('\n' , output);continue ; }@@ -1381,13 +1385,10 @@ static void print_counter(struct perf_evsel *counter, char *prefix)else abs_printout (cpu,0 , counter, uval); -if (!csv_output) { +if (!csv_output)print_noise (counter,1.0 ); +print_running (run, ena); -if (run != ena) -fprintf (output," (%.2f%%)" , -100.0 * run / ena); - }fputc ('\n' , output); } }Signature · 7 lines
1.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Quoted 13 lines · Andi Kleen
From: Andi Kleen <[email protected]>
The information how much a counter ran in perf stat can be quite interesting for other tools to judge how trustworthy a measurement is.
Currently it is only output in non CSV mode.
This patches make perf stat always output the running time and the enabled/running ratio in CSV mode.
This adds two new fields at the end for each line. I assume that existing tools ignore new fields at the end, so it's on by default.
Quoted 6 lines
Only CSV mode is affected, no difference otherwise.
v2: Add extra
print_runningfunction
v3: Avoid printing nan
v4: Remove some elses and add brackets.
v5: Move non CSV case intoprint_running
thanks,
jirka
tip-bot for Andi Kleen
merge bot[tip:perf/core] perf stat: Output running time and run/ enabled ratio in CSV mode
In reply to Andi Kleenperf stat: Output running time and run/enabled ratio in CSV mode
Commit-ID: d73515c03c6a2706e088094ff6095a3abefd398b Gitweb: http://git.kernel.org/tip/d73515c03c6a2706e088094ff6095a3abefd398b Author: Andi Kleen <[email protected]> AuthorDate: Wed, 11 Mar 2015 07:16:27 -0700 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 13 Mar 2015 07:46:04 -0300
perf stat: Output running time and run/enabled ratio in CSV mode
The information how much a counter ran in 'perf stat' can be quite interesting for other tools to judge how trustworthy a measurement is.
Currently it is only output in non CSV mode.
This patches make perf stat always output the running time and the enabled/running ratio in CSV mode.
This adds two new fields at the end for each line. I assume that existing tools ignore new fields at the end, so it's on by default.
Only CSV mode is affected, no difference otherwise.
v2: Add extra print_running function
v3: Avoid printing nan
v4: Remove some elses and add brackets.
v5: Move non CSV case into print_running
--- tools/perf/builtin-stat.c | 48 ++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-)
tools/perf/builtin-stat.c +25 -23
@@ -769,6 +769,19 @@ static int run_perf_stat(int argc, const char **argv)return ret; } +static void print_running (u64 run,u64 ena) +{ +if (csv_output) { +fprintf (output,"%s%" PRIu64"%s%.2f" , + csv_sep, + run, + csv_sep, + ena ?100.0 * run / ena :100.0 ); + }else if (run != ena) { +fprintf (output," (%.2f%%)" ,100.0 * run / ena); + } +} +static void print_noise_pct (double total,double avg) {double pct =rel_stddev_stats (total, avg);
@@ -1252,6 +1265,7 @@ static void print_aggr(char *prefix)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (run, ena);fputc ('\n' , output);continue ; }
@@ -1262,13 +1276,10 @@ static void print_aggr(char *prefix)else abs_printout (id, nr, counter, uval); -if (!csv_output) { +if (!csv_output)print_noise (counter,1.0 ); -if (run != ena) -fprintf (output," (%.2f%%)" , -100.0 * run / ena); - } +print_running (run, ena);fputc ('\n' , output); } }
@@ -1284,6 +1295,10 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)double avg =avg_stats (&ps->res_stats[0 ]);int scaled = counter->counts->scaled;double uval; +double avg_enabled, avg_running; + + avg_enabled =avg_stats (&ps->res_stats[1 ]); + avg_running =avg_stats (&ps->res_stats[2 ]);if (prefix)fprintf (output,"%s" , prefix);
@@ -1303,6 +1318,7 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)if (counter->cgrp)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (avg_running, avg_enabled);fputc ('\n' , output);return ; }
@@ -1316,19 +1332,7 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)print_noise (counter, avg); -if (csv_output) { -fputc ('\n' , output); -return ; - } - -if (scaled) { -double avg_enabled, avg_running; - - avg_enabled =avg_stats (&ps->res_stats[1 ]); - avg_running =avg_stats (&ps->res_stats[2 ]); - -fprintf (output," [%5.2f%%]" ,100 * avg_running / avg_enabled); - } +print_running (avg_running, avg_enabled);fprintf (output,"\n" ); }
@@ -1370,6 +1374,7 @@ static void print_counter(struct perf_evsel *counter, char *prefix)fprintf (output,"%s%s" , csv_sep, counter->cgrp->name); +print_running (run, ena);fputc ('\n' , output);continue ; }
@@ -1381,13 +1386,10 @@ static void print_counter(struct perf_evsel *counter, char *prefix)else abs_printout (cpu,0 , counter, uval); -if (!csv_output) { +if (!csv_output)print_noise (counter,1.0 ); +print_running (run, ena); -if (run != ena) -fprintf (output," (%.2f%%)" , -100.0 * run / ena); - }fputc ('\n' , output); } }