From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752895AbdHGKhC (ORCPT ); Mon, 7 Aug 2017 06:37:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44998 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752606AbdHGKhA (ORCPT ); Mon, 7 Aug 2017 06:37:00 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com F3BD16147E Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=jolsa@redhat.com Date: Mon, 7 Aug 2017 12:36:57 +0200 From: Jiri Olsa To: Andi Kleen Cc: acme@kernel.org, jolsa@kernel.org, linux-kernel@vger.kernel.org, Andi Kleen Subject: Re: [PATCH v1 15/15] perf, tools: Support duration_time Message-ID: <20170807103657.GC13591@krava> References: <20170724234015.5165-1-andi@firstfloor.org> <20170724234015.5165-16-andi@firstfloor.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170724234015.5165-16-andi@firstfloor.org> User-Agent: Mutt/1.8.3 (2017-05-23) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Mon, 07 Aug 2017 10:37:00 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jul 24, 2017 at 04:40:15PM -0700, Andi Kleen wrote: > From: Andi Kleen > > 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 > --- > 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); } not ideal to actualy create an kernel event for something we need only access in userspace, but I could live with that.. > 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; however this will enable the event value only for metric processing and following stat command will return 0: [jolsa@krava perf]$ ./perf stat -e duration_time kill kill: not enough arguments Performance counter stats for 'kill': 0 duration_time:u 0.006556409 seconds time elapsed perhaps we could substitute the value when we read the event also walltime_nsecs_stats is only updated at the end of the workload, so this won't work for interval.. but not sure this is an issue though jirka