From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752261AbbCKTxT (ORCPT ); Wed, 11 Mar 2015 15:53:19 -0400 Received: from mail.kernel.org ([198.145.29.136]:46676 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750775AbbCKTxS (ORCPT ); Wed, 11 Mar 2015 15:53:18 -0400 Date: Wed, 11 Mar 2015 16:53:26 -0300 From: Arnaldo Carvalho de Melo To: Jiri Olsa Cc: linux-kernel@vger.kernel.org, Andi Kleen Subject: Re: [PATCH 1/3] perf, tools: Output running time and run/enabled ratio in CSV mode Message-ID: <20150311195326.GB926@kernel.org> References: <1426087682-22765-1-git-send-email-andi@firstfloor.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1426087682-22765-1-git-send-email-andi@firstfloor.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Wed, Mar 11, 2015 at 08:28:00AM -0700, Andi Kleen escreveu: > From: Andi Kleen > > 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 > Reviewed-by: Jiri Olsa Jiri, have you sent that "Reviewed-by" tag? Don't remember seeing it. - Arnaldo > Signed-off-by: Andi Kleen > --- > tools/perf/builtin-stat.c | 47 ++++++++++++++++++++++++----------------------- > 1 file changed, 24 insertions(+), 23 deletions(-) > > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c > index d28949d..765e220 100644 > --- a/tools/perf/builtin-stat.c > +++ b/tools/perf/builtin-stat.c > @@ -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); > } > } > -- > 1.9.3