Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1695287

[PATCH v1 15/15] perf, tools: Support duration_time

From Andi Kleen <andi@firstfloor.org>
Newsgroups linux.kernel
Subject [PATCH v1 15/15] perf, tools: Support duration_time
Date 2017-07-25 01:50 +0200
Message-ID <u6VgT-3zh-45@gated-at.bofh.it> (permalink)
References <u6VgR-3zh-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Andi Kleen <ak@linux.intel.com>

Some of the metrics formulas (like GFLOPs) need to know how long
the measurement period is. Support an internal event called duration_time, which
reports time in second. It maps to the dummy event, but is
special cased for statistics to report the walltime duration.

So far it is not printed, but only used internally for metrics.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 tools/perf/util/parse-events.l |  1 +
 tools/perf/util/stat-shadow.c  | 17 +++++++++++++----
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index 07ee5bb3a8b0..f7bc74f8a615 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -277,6 +277,7 @@ cpu-migrations|migrations			{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COU
 alignment-faults				{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_ALIGNMENT_FAULTS); }
 emulation-faults				{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EMULATION_FAULTS); }
 dummy						{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
+duration_time					{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY); }
 bpf-output					{ return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_BPF_OUTPUT); }
 
 	/*
diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
index 122f37b38a65..34ae2960730b 100644
--- a/tools/perf/util/stat-shadow.c
+++ b/tools/perf/util/stat-shadow.c
@@ -641,11 +641,20 @@ static void generic_metric(const char *metric_expr,
 	expr__add_id(&pctx, name, avg);
 	for (i = 0; metric_events[i]; i++) {
 		struct saved_value *v;
+		struct stats *stats;
+		double scale;
 
-		v = saved_value_lookup(metric_events[i], cpu, false);
-		if (!v)
-			break;
-		expr__add_id(&pctx, metric_events[i]->name, avg_stats(&v->stats));
+		if (!strcmp(metric_events[i]->name, "duration_time")) {
+			stats = &walltime_nsecs_stats;
+			scale = 1e-9;
+		} else {
+			v = saved_value_lookup(metric_events[i], cpu, false);
+			if (!v)
+				break;
+			stats = &v->stats;
+			scale = 1.0;
+		}
+		expr__add_id(&pctx, metric_events[i]->name, avg_stats(stats)*scale);
 	}
 	if (!metric_events[i]) {
 		const char *p = metric_expr;
-- 
2.9.4

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Support standalone metrics and metric groups for perf Andi Kleen <andi@firstfloor.org> - 2017-07-25 01:50 +0200
  [PATCH v1 11/15] perf, tools, stat: Factor out generic metric printing Andi Kleen <andi@firstfloor.org> - 2017-07-25 01:50 +0200
  [PATCH v1 03/15] perf, tools, stat: Fix saved values rbtree lookup Andi Kleen <andi@firstfloor.org> - 2017-07-25 01:50 +0200
  [PATCH v1 15/15] perf, tools: Support duration_time Andi Kleen <andi@firstfloor.org> - 2017-07-25 01:50 +0200
  [PATCH v1 01/15] perf, tools, stat: Fix buffer overflow while freeing events Andi Kleen <andi@firstfloor.org> - 2017-07-25 01:50 +0200
  Re: Support standalone metrics and metric groups for perf Jiri Olsa <jolsa@redhat.com> - 2017-07-26 16:20 +0200
    Re: Support standalone metrics and metric groups for perf Andi Kleen <andi@firstfloor.org> - 2017-07-26 17:40 +0200
      Re: Support standalone metrics and metric groups for perf Jiri Olsa <jolsa@redhat.com> - 2017-07-28 10:50 +0200

csiph-web