All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andi Kleen <andi@firstfloor.org>
To: acme@infradead.org
Cc: eranian@google.com, jolsa@redhat.com,
	linux-kernel@vger.kernel.org, Andi Kleen <ak@linux.intel.com>
Subject: [PATCH 5/5] perf, tools: Output running time and run/enabled ratio in CSV mode
Date: Fri,  2 Aug 2013 17:41:13 -0700	[thread overview]
Message-ID: <1375490473-1503-6-git-send-email-andi@firstfloor.org> (raw)
In-Reply-To: <1375490473-1503-1-git-send-email-andi@firstfloor.org>

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.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 tools/perf/builtin-stat.c | 57 +++++++++++++++++++++++++++++++++++++----------
 1 file changed, 45 insertions(+), 12 deletions(-)

diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index f686d5f..940fcfd 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -982,6 +982,13 @@ static void print_aggr(char *prefix)
 					fprintf(output, "%s%s",
 						csv_sep, counter->cgrp->name);
 
+				if (csv_output)
+					fprintf(output, "%s%" PRIu64 "%s%.2f",
+						csv_sep,
+						run,
+						csv_sep,
+						100.0 * run / ena);
+
 				fputc('\n', output);
 				continue;
 			}
@@ -997,6 +1004,12 @@ static void print_aggr(char *prefix)
 				if (run != ena)
 					fprintf(output, "  (%.2f%%)",
 						100.0 * run / ena);
+			} else {
+				fprintf(output, "%s%" PRIu64 "%s%.2f",
+						csv_sep,
+						run,
+						csv_sep,
+						100.0 * run / ena);
 			}
 			fputc('\n', output);
 		}
@@ -1012,6 +1025,10 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)
 	struct perf_stat *ps = counter->priv;
 	double avg = avg_stats(&ps->res_stats[0]);
 	int scaled = counter->counts->scaled;
+	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);
@@ -1027,6 +1044,13 @@ static void print_counter_aggr(struct perf_evsel *counter, char *prefix)
 		if (counter->cgrp)
 			fprintf(output, "%s%s", csv_sep, counter->cgrp->name);
 
+		if (csv_output)
+			fprintf(output, "%s%.0f%s%.2f",
+				csv_sep,
+				avg_running,
+				csv_sep,
+				100.0 * avg_running / avg_enabled);
+
 		fputc('\n', output);
 		return;
 	}
@@ -1038,19 +1062,14 @@ 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]);
-
+	if (csv_output)
+		fprintf(output, "%s%.0f%s%.2f",
+			csv_sep,
+			avg_running,
+			csv_sep,
+			100.0 * avg_running / avg_enabled);
+	else
 		fprintf(output, " [%5.2f%%]", 100 * avg_running / avg_enabled);
-	}
 	fprintf(output, "\n");
 }
 
@@ -1085,6 +1104,13 @@ static void print_counter(struct perf_evsel *counter, char *prefix)
 				fprintf(output, "%s%s",
 					csv_sep, counter->cgrp->name);
 
+			if (csv_output)
+				fprintf(output, "%s%" PRIu64 "%s%.2f",
+					csv_sep,
+					run,
+					csv_sep,
+					100.0 * run / ena);
+
 			fputc('\n', output);
 			continue;
 		}
@@ -1100,7 +1126,14 @@ static void print_counter(struct perf_evsel *counter, char *prefix)
 			if (run != ena)
 				fprintf(output, "  (%.2f%%)",
 					100.0 * run / ena);
+		} else {
+			fprintf(output, "%s%" PRIu64 "%s%.2f",
+					csv_sep,
+					run,
+					csv_sep,
+					100.0 * run / ena);
 		}
+
 		fputc('\n', output);
 	}
 }
-- 
1.8.3.1


  parent reply	other threads:[~2013-08-03  0:41 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-03  0:41 Misc perf stat improvements Andi Kleen
2013-08-03  0:41 ` [PATCH 1/5] perf, tools: Remove obsolete dummy execve Andi Kleen
2013-08-12 10:19   ` [tip:perf/core] perf evlist: " tip-bot for Andi Kleen
2013-08-03  0:41 ` [PATCH 2/5] tools, perf: Add support to evsel for enabling counters Andi Kleen
2013-08-05  8:28   ` Namhyung Kim
2013-08-05 16:10     ` Arnaldo Carvalho de Melo
2013-08-12 10:19   ` [tip:perf/core] perf evsel: Add support " tip-bot for Andi Kleen
2013-08-03  0:41 ` [PATCH 3/5] perf, tools: Add support for --initial-delay option to perf stat Andi Kleen
2013-08-12 10:20   ` [tip:perf/core] perf stat: Add support for --initial-delay option tip-bot for Andi Kleen
2013-08-03  0:41 ` [PATCH 4/5] perf, tools: flush output after each line in stat interval mode Andi Kleen
2013-08-12 10:20   ` [tip:perf/core] perf stat: Flush output after each line in " tip-bot for Andi Kleen
2013-08-03  0:41 ` Andi Kleen [this message]
2013-08-05  9:45   ` [PATCH 5/5] perf, tools: Output running time and run/enabled ratio in CSV mode Jiri Olsa
2013-08-05  9:45 ` Misc perf stat improvements Jiri Olsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1375490473-1503-6-git-send-email-andi@firstfloor.org \
    --to=andi@firstfloor.org \
    --cc=acme@infradead.org \
    --cc=ak@linux.intel.com \
    --cc=eranian@google.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.