Messages in this thread Patch in this message | | | Date | Mon, 9 Mar 2015 08:49:54 +0100 | From | Jiri Olsa <> | Subject | Re: [PATCH 1/4] perf, tools: Output running time and run/enabled ratio in CSV mode |
| |
On Sun, Mar 08, 2015 at 04:55:21PM -0700, Andi Kleen wrote: > From: Andi Kleen <ak@linux.intel.com> > > 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 <jolsa@redhat.com> > Signed-off-by: Andi Kleen <ak@linux.intel.com> > --- > 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
| |