From: peterz@infradead.org
To: kan.liang@linux.intel.com
Cc: acme@redhat.com, mingo@kernel.org, linux-kernel@vger.kernel.org,
jolsa@kernel.org, eranian@google.com,
alexander.shishkin@linux.intel.com, ak@linux.intel.com,
like.xu@linux.intel.com
Subject: Re: [PATCH V7 08/14] perf/x86/intel: Generic support for hardware TopDown metrics
Date: Fri, 24 Jul 2020 17:27:55 +0200 [thread overview]
Message-ID: <20200724152755.GK43129@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20200724131906.GW119549@hirez.programming.kicks-ass.net>
On Fri, Jul 24, 2020 at 03:19:06PM +0200, peterz@infradead.org wrote:
> On Thu, Jul 23, 2020 at 10:11:11AM -0700, kan.liang@linux.intel.com wrote:
> > @@ -3375,6 +3428,72 @@ static int intel_pmu_hw_config(struct perf_event *event)
> > if (event->attr.type != PERF_TYPE_RAW)
> > return 0;
> >
> > + /*
> > + * Config Topdown slots and metric events
> > + *
> > + * The slots event on Fixed Counter 3 can support sampling,
> > + * which will be handled normally in x86_perf_event_update().
> > + *
> > + * The metric events don't support sampling.
> > + *
> > + * For counting, topdown slots and metric events will be
> > + * handled specially for event update.
> > + * A flag PERF_X86_EVENT_TOPDOWN is applied for the case.
> > + */
> > + if (x86_pmu.intel_cap.perf_metrics && is_topdown_event(event)) {
> > + if (is_metric_event(event)) {
> > + struct perf_event *leader = event->group_leader;
> > + struct perf_event *sibling;
> > +
> > + /* The metric events don't support sampling. */
> > + if (is_sampling_event(event))
> > + return -EINVAL;
> > +
> > + /* The metric events cannot be a group leader. */
> > + if (leader == event)
> > + return -EINVAL;
> > +
> > + /*
> > + * The slots event cannot be the leader of a topdown
> > + * sample-read group, e.g., {slots, topdown-retiring}:S
> > + */
> > + if (is_slots_event(leader) && is_sampling_event(leader))
> > + return -EINVAL;
>
> This has nothing to do with sample-read; SLOTS cannot be sampling when
> coupled with the METRIC stuff because hardware is daft.
>
> And you can have SAMPLE_READ on non-leader events just fine.
>
> > +
> > + /*
> > + * The slots event must be before the metric events,
> > + * because we only update the values of a topdown
> > + * group once with the slots event.
> > + */
> > + if (!is_slots_event(leader)) {
> > + for_each_sibling_event(sibling, leader) {
> > + if (is_slots_event(sibling))
> > + break;
> > + if (is_metric_event(sibling))
> > + return -EINVAL;
> > + }
> > + }
>
> Per the SIBLING patch this then wants to be:
>
> if (!is_slots_event(leader))
> return -EINVAL;
>
> event->event_caps |= PERF_EV_CAP_SIBLING.
> /*
> * Only once we have a METRICs sibling to we
> * need TopDown magic.
> */
> leader->hw.flags |= PERF_X86_EVENT_TOPDOWN;
> > + }
> > +
> > + if (!is_sampling_event(event)) {
> > + if (event->attr.config1 != 0)
> > + return -EINVAL;
>
> How does this depend on sampling?
>
> > + /*
> > + * The TopDown metrics events and slots event don't
> > + * support any filters.
> > + */
> > + if (event->attr.config & X86_ALL_EVENT_FLAGS)
> > + return -EINVAL;
>
> That seems independent of sampling too. Even a sampling SLOTS shouldn't
> be having any of those afaict.
>
> > +
> > + event->hw.flags |= PERF_X86_EVENT_TOPDOWN;
>
> This is confusing too, a !sampling SLOTS event without METRIC siblings
> shouldn't have this set, right? So arguably, this should be like above.
>
> > +
> > + event->event_caps |= PERF_EV_CAP_COEXIST;
> > +
> > + if (is_metric_event(event))
> > + event->hw.flags &= ~PERF_X86_EVENT_RDPMC_ALLOWED;
>
> This too seems like something that should be in the is_metric_event()
> branch above.
>
> > + }
> > + }
> > +
> > if (!(event->attr.config & ARCH_PERFMON_EVENTSEL_ANY))
> > return 0;
> >
FWIW, I pushed out a branch with all these changes in:
git://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git perf/metric
Just to get it some build love, if you want it differently, I'm happy to
throw it all out again.
next prev parent reply other threads:[~2020-07-24 15:28 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-23 17:11 [PATCH V7 00/14] TopDown metrics support for Icelake kan.liang
2020-07-23 17:11 ` [PATCH V7 01/14] perf/x86: Use event_base_rdpmc for the RDPMC userspace support kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 02/14] perf/x86/intel: Name the global status bit in NMI handler kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 03/14] perf/x86/intel: Introduce the fourth fixed counter kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 04/14] perf/x86/intel: Move BTS index to 47 kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 05/14] perf/x86/intel: Fix the name of perf METRICS kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 06/14] perf/x86/intel: Use switch in intel_pmu_disable/enable_event kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 07/14] perf/core: Add a new PERF_EV_CAP_COEXIST event capability kan.liang
2020-07-24 10:55 ` peterz
2020-07-24 11:46 ` peterz
2020-07-24 13:43 ` Liang, Kan
2020-07-24 13:54 ` Peter Zijlstra
2020-07-24 14:19 ` Liang, Kan
2020-07-24 14:32 ` Peter Zijlstra
2020-07-24 14:46 ` Andi Kleen
2020-07-24 14:59 ` Peter Zijlstra
2020-07-24 16:43 ` peterz
2020-07-24 17:00 ` Liang, Kan
2020-07-24 14:39 ` Andi Kleen
2020-07-24 14:51 ` Peter Zijlstra
2020-08-19 8:52 ` [tip: perf/core] perf/core: Add a new PERF_EV_CAP_SIBLING " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 08/14] perf/x86/intel: Generic support for hardware TopDown metrics kan.liang
2020-07-24 13:19 ` peterz
2020-07-24 15:27 ` peterz [this message]
2020-07-24 16:07 ` Liang, Kan
2020-07-24 19:10 ` Liang, Kan
2020-07-28 12:32 ` Peter Zijlstra
2020-07-28 13:09 ` Peter Zijlstra
2020-07-28 13:28 ` Liang, Kan
2020-07-28 13:44 ` peterz
2020-07-28 14:01 ` Liang, Kan
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 09/14] perf/x86: Add a macro for RDPMC offset of fixed counters kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 10/14] perf/x86/intel: Support TopDown metrics on Ice Lake kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 11/14] perf/x86/intel: Support per-thread RDPMC TopDown metrics kan.liang
2020-08-19 8:52 ` [tip: perf/core] " tip-bot2 for Kan Liang
2020-07-23 17:11 ` [PATCH V7 12/14] perf, tools, stat: Support new per thread " kan.liang
2020-07-24 3:29 ` Andi Kleen
2020-07-23 17:11 ` [PATCH V7 13/14] perf, tools, stat: Check Topdown Metric group kan.liang
2020-07-23 17:11 ` [PATCH V7 14/14] perf, tools: Add documentation for topdown metrics kan.liang
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=20200724152755.GK43129@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=acme@redhat.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=eranian@google.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=like.xu@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@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.