On Sun, Mar 08, 2015 at 04:55:21PM -0700, Andi Kleen wrote: > 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.
hum, so people using CSV mode will now see extra 2 numbers at the end of the line: $ ./perf.old stat -x, -e cycles ls > /dev/null 2679161,,cycles $ ./perf stat -x, -e cycles ls > /dev/null 2574169,,cycles,1295544,100.00 we could be breaking existing scripts.. you recently added 'running-time' option for record, could you please add same option for stat? plus 2 nits below thanks, jirka > > v2: Add extra print_running function > v3: Avoid printing nan > Reviewed-by: Jiri Olsa <[email protected]> > Signed-off-by: Andi Kleen <[email protected]> > --- > tools/perf/builtin-stat.c | 36 ++++++++++++++++++++++++------------ > 1 file changed, 24 insertions(+), 12 deletions(-) > > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c > index d28949d..5d0c6ea 100644 > --- a/tools/perf/builtin-stat.c > +++ b/tools/perf/builtin-stat.c > @@ -769,6 +769,16 @@ 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); nit - need { } for multiplne lines 'if' leg > +} > + > static void print_noise_pct(double total, double avg) > { > double pct = rel_stddev_stats(total, avg); > @@ -1252,6 +1262,7 @@ static void print_aggr(char *prefix) > fprintf(output, "%s%s", > csv_sep, counter->cgrp->name); > > + print_running(run, ena); > fputc('\n', output); > continue; > } > @@ -1268,6 +1279,8 @@ static void print_aggr(char *prefix) > if (run != ena) > fprintf(output, " (%.2f%%)", > 100.0 * run / ena); > + } else { > + print_running(run, ena); > } we already have 'csv_output' check in print_running > fputc('\n', output); > } > @@ -1284,6 +1297,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 +1320,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 +1334,9 @@ 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]); > - > + print_running(avg_running, avg_enabled); > + if (!csv_output) > fprintf(output, " [%5.2f%%]", 100 * avg_running / avg_enabled); > - } > fprintf(output, "\n"); > } > > @@ -1370,6 +1378,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; > } > @@ -1387,7 +1396,10 @@ static void print_counter(struct perf_evsel *counter, > char *prefix) > if (run != ena) > fprintf(output, " (%.2f%%)", > 100.0 * run / ena); > + } else { > + print_running(run, ena); > } same here -- 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/

