From: Andi Kleen <andi@firstfloor.org>
To: Jiri Olsa <jolsa@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>,
acme@kernel.org, jolsa@kernel.org, linux-kernel@vger.kernel.org,
Andi Kleen <ak@linux.intel.com>
Subject: Re: [PATCH 10/10] perf, tools, stat: Output JSON MetricExpr metric
Date: Wed, 8 Feb 2017 13:51:05 -0800 [thread overview]
Message-ID: <20170208215103.GP26852@two.firstfloor.org> (raw)
In-Reply-To: <20170208113134.GE10639@krava>
On Wed, Feb 08, 2017 at 12:31:34PM +0100, Jiri Olsa wrote:
> On Fri, Jan 27, 2017 at 06:03:45PM -0800, Andi Kleen wrote:
> > From: Andi Kleen <ak@linux.intel.com>
> >
> > Add generic infrastructure to perf stat to output ratios for "MetricExpr"
> > entries in the event lists. Many events are more useful as ratios
> > than in raw form, typically some count in relation to total ticks.
> >
> > Transfer the MetricExpr information from the alias to the evsel.
> >
> > We mark the events that need to be collected for MetricExpr, and also
> > link the events using them with a pointer. The code is careful
> > to always prefer the right event in the same group to minimize
> > multiplexing errors. At the moment only a single relation is supported.
> >
> > Then add a rblist to the stat shadow code that remembers stats based
> > on the cpu and context.
> >
> > Then finally update and retrieve and print these values similarly to the
> > existing hardcoded perf metrics. We use the simple expression parser
> > added earlier to evaluate the expression.
> >
> > Normally we just output the result without further commentary,
> > but for --metric-only this would lead to empty columns. So for this
> > case use the original event as description.
> >
> > So far there is no attempt to automatically add the MetricExpr event,
> > if it is missing, however we suggest it to the user.
> >
> > $ perf stat -a -I 1000 -e '{unc_p_clockticks,unc_p_freq_max_os_cycles}'
> > 1.000228813 800,139,950 unc_p_clockticks
> > 1.000228813 789,833,783 unc_p_freq_max_os_cycles # 98.7
> > 2.000654229 800,308,990 unc_p_clockticks
> > 2.000654229 396,214,238 unc_p_freq_max_os_cycles # 49.5
>
> [jolsa@krava perf]$ ./perf stat -a -I 1000 -e '{unc_p_clockticks,unc_p_freq_max_os_cycles}'
> invalid or unsupported event: '{unc_p_clockticks,unc_p_freq_max_os_cycles}'
> Run 'perf list' for a list of valid events
>
> could you show an example of the MetricExpr?
It's in the event list branch
https://git.kernel.org/cgit/linux/kernel/git/ak/linux-misc.git/log/?h=perf/intel-uncore-json-files-3
All the metrics currently do is just the same as DividedBy earlier:
generate a percentage out of a count, typically based on clock ticks.
+ "MetricExpr": "(UNC_M_POWER_CHANNEL_PPD / UNC_M_CLOCKTICKS) *
100.",
>
> it's part of the event record, what if you wanted to have 2 or more metrics defined for event?
Would need multiple copies of the event.
>
> who defines those expressions?
It's metrics used internally by Intel.
>
> what if you dont provide the necessary events needed for the expression?
Then perf prints a warning suggesting the events.
It's currently a TODO to add them automatically. Could be added,
but the patch was already complex, so I didn't add it.
It's somewhat complicated because you would need to avoid
duplicates and have to handle groups correctly. perf stat
doesn't have the necessarily knowledge to fully understand
the constraints on groups.
Then the extra event may not fit into the group, and it seemed
saner to let the user decide what to do then, instead of
generating a possible unschedulable group.
So it's not that easy to do it automatically.
> >
> > $ perf stat -a -I 1000 -e '{unc_p_clockticks,unc_p_freq_max_os_cycles}' --metric-only
> > 1.000206740 48.0
> > 2.000451543 48.1
>
> how does user know what those number stand for?
I assume it was obvious enough that it is the percentage. Could
add something more to the event description.
>
> is there a way for user to display the metric expression?
Only in the source, but could be added to perf list -v
For most users metrics are much more useful than raw numbers.
I think they would rather consider raw numbers to be a "hack
with no concept"
-Andi
next prev parent reply other threads:[~2017-02-08 21:51 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-28 2:03 Support Intel uncore event lists Andi Kleen
2017-01-28 2:03 ` [PATCH 01/10] perf, tools: Parse eventcode as number in jevents Andi Kleen
2017-02-10 7:41 ` [tip:perf/core] perf jevents: Parse eventcode as number tip-bot for Andi Kleen
2017-01-28 2:03 ` [PATCH 02/10] perf, tools: Add support for parsing uncore json files Andi Kleen
2017-02-10 7:41 ` [tip:perf/core] perf jevents: " tip-bot for Andi Kleen
2017-01-28 2:03 ` [PATCH 03/10] perf, tools: Support per pmu json aliases Andi Kleen
2017-02-10 7:42 ` [tip:perf/core] perf pmu: " tip-bot for Andi Kleen
2017-01-28 2:03 ` [PATCH 04/10] perf, tools: Support event aliases for non cpu// pmus Andi Kleen
2017-02-10 7:42 ` [tip:perf/core] perf pmu: " tip-bot for Andi Kleen
2017-01-28 2:03 ` [PATCH 05/10] perf, tools: Add debug support for outputing alias string Andi Kleen
2017-02-10 7:43 ` [tip:perf/core] perf list: " tip-bot for Andi Kleen
2017-01-28 2:03 ` [PATCH 06/10] perf, tools: Collapse identically named events in perf stat Andi Kleen
2017-02-08 11:31 ` Jiri Olsa
2017-01-28 2:03 ` [PATCH 07/10] perf, tools: Expand PMU events by prefix match Andi Kleen
2017-02-08 11:30 ` Jiri Olsa
2017-01-28 2:03 ` [PATCH 08/10] perf, tools: Add a simple expression parser for JSON Andi Kleen
2017-02-08 11:31 ` Jiri Olsa
2017-01-28 2:03 ` [PATCH 09/10] perf, tools: Support MetricExpr header in JSON event list Andi Kleen
2017-02-08 11:31 ` Jiri Olsa
2017-01-28 2:03 ` [PATCH 10/10] perf, tools, stat: Output JSON MetricExpr metric Andi Kleen
2017-02-08 11:31 ` Jiri Olsa
2017-02-08 21:51 ` Andi Kleen [this message]
2017-02-09 11:39 ` Jiri Olsa
2017-02-09 17:00 ` Andi Kleen
2017-02-09 18:37 ` Jiri Olsa
2017-02-09 18:59 ` Andi Kleen
2017-02-10 8:22 ` Jiri Olsa
2017-02-09 11:42 ` 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=20170208215103.GP26852@two.firstfloor.org \
--to=andi@firstfloor.org \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=jolsa@kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox