From: Will Deacon <will.deacon@arm.com> To: Mark Rutland <mark.rutland@arm.com> Cc: "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "acme@kernel.org" <acme@kernel.org>, Liviu Dudau <Liviu.Dudau@arm.com>, Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>, "mingo@redhat.com" <mingo@redhat.com>, "paulus@samba.org" <paulus@samba.org>, "peterz@infradead.org" <peterz@infradead.org>, Sudeep Holla <Sudeep.Holla@arm.com>, Drew Richardson <Drew.Richardson@arm.com> Subject: Re: [PATCH 1/7] perf: allow for PMU-specific event filtering Date: Fri, 22 May 2015 15:08:44 +0100 [thread overview] Message-ID: <20150522140844.GA1619@arm.com> (raw) In-Reply-To: <1431533549-27715-2-git-send-email-mark.rutland@arm.com> Hi Mark, On Wed, May 13, 2015 at 05:12:23PM +0100, Mark Rutland wrote: > In certain circumstances it may not be possible to schedule particular > events due to constraints other than a lack of hardware counters (e.g. > on big.LITTLE systems where CPUs support different events). The core > perf event code does not distinguish these cases and pessimistically > assumes that any failure to schedule an event means that it is not worth > attempting to schedule later events, even if some hardware counters are > still unused. > > When an event a pmu cannot schedule exists in a flexible group list it > can unnecessarily prevent event groups following it in the list from > being scheduled (until it is rotated to the end of the list). This means > some events are scheduled for only a portion of the time they could be, > and for short running programs no events may be scheduled if the list is > initially sorted in an unfortunate order. > > This patch adds a new (optional) filter_match function pointer to struct > pmu which a pmu driver can use to tell perf core when an event matches > pmu-specific scheduling requirements. This plugs into the existing > event_filter_match logic, and makes it possible to avoid the scheduling > problem described above. When no filter is provided by the PMU, the > existing behaviour is retained. > > Signed-off-by: Mark Rutland <mark.rutland@arm.com> > Acked-by: Will Deacon <will.deacon@arm.com> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Arnaldo Carvalho de Melo <acme@kernel.org> > --- > include/linux/perf_event.h | 5 +++++ > kernel/events/core.c | 8 +++++++- > 2 files changed, 12 insertions(+), 1 deletion(-) Whilst I'm really keen to merge the architecture-specific parts of this series, I'm going to need an Ack from one of the perf core maintainers on this patch. Peter, can you take a look please? (and I assume this is self-contained enough not to conflict heavily with the current perf queue?). Cheers, Will > diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h > index 61992cf..67c719c 100644 > --- a/include/linux/perf_event.h > +++ b/include/linux/perf_event.h > @@ -304,6 +304,11 @@ struct pmu { > * Free pmu-private AUX data structures > */ > void (*free_aux) (void *aux); /* optional */ > + > + /* > + * Filter events for PMU-specific reasons. > + */ > + int (*filter_match) (struct perf_event *event); /* optional */ > }; > > /** > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 81aa3a4..aaeb449 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -1506,11 +1506,17 @@ static int __init perf_workqueue_init(void) > > core_initcall(perf_workqueue_init); > > +static inline int pmu_filter_match(struct perf_event *event) > +{ > + struct pmu *pmu = event->pmu; > + return pmu->filter_match ? pmu->filter_match(event) : 1; > +} > + > static inline int > event_filter_match(struct perf_event *event) > { > return (event->cpu == -1 || event->cpu == smp_processor_id()) > - && perf_cgroup_match(event); > + && perf_cgroup_match(event) && pmu_filter_match(event); > } > > static void > -- > 1.9.1 >
WARNING: multiple messages have this Message-ID (diff)
From: will.deacon@arm.com (Will Deacon) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/7] perf: allow for PMU-specific event filtering Date: Fri, 22 May 2015 15:08:44 +0100 [thread overview] Message-ID: <20150522140844.GA1619@arm.com> (raw) In-Reply-To: <1431533549-27715-2-git-send-email-mark.rutland@arm.com> Hi Mark, On Wed, May 13, 2015 at 05:12:23PM +0100, Mark Rutland wrote: > In certain circumstances it may not be possible to schedule particular > events due to constraints other than a lack of hardware counters (e.g. > on big.LITTLE systems where CPUs support different events). The core > perf event code does not distinguish these cases and pessimistically > assumes that any failure to schedule an event means that it is not worth > attempting to schedule later events, even if some hardware counters are > still unused. > > When an event a pmu cannot schedule exists in a flexible group list it > can unnecessarily prevent event groups following it in the list from > being scheduled (until it is rotated to the end of the list). This means > some events are scheduled for only a portion of the time they could be, > and for short running programs no events may be scheduled if the list is > initially sorted in an unfortunate order. > > This patch adds a new (optional) filter_match function pointer to struct > pmu which a pmu driver can use to tell perf core when an event matches > pmu-specific scheduling requirements. This plugs into the existing > event_filter_match logic, and makes it possible to avoid the scheduling > problem described above. When no filter is provided by the PMU, the > existing behaviour is retained. > > Signed-off-by: Mark Rutland <mark.rutland@arm.com> > Acked-by: Will Deacon <will.deacon@arm.com> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Arnaldo Carvalho de Melo <acme@kernel.org> > --- > include/linux/perf_event.h | 5 +++++ > kernel/events/core.c | 8 +++++++- > 2 files changed, 12 insertions(+), 1 deletion(-) Whilst I'm really keen to merge the architecture-specific parts of this series, I'm going to need an Ack from one of the perf core maintainers on this patch. Peter, can you take a look please? (and I assume this is self-contained enough not to conflict heavily with the current perf queue?). Cheers, Will > diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h > index 61992cf..67c719c 100644 > --- a/include/linux/perf_event.h > +++ b/include/linux/perf_event.h > @@ -304,6 +304,11 @@ struct pmu { > * Free pmu-private AUX data structures > */ > void (*free_aux) (void *aux); /* optional */ > + > + /* > + * Filter events for PMU-specific reasons. > + */ > + int (*filter_match) (struct perf_event *event); /* optional */ > }; > > /** > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 81aa3a4..aaeb449 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -1506,11 +1506,17 @@ static int __init perf_workqueue_init(void) > > core_initcall(perf_workqueue_init); > > +static inline int pmu_filter_match(struct perf_event *event) > +{ > + struct pmu *pmu = event->pmu; > + return pmu->filter_match ? pmu->filter_match(event) : 1; > +} > + > static inline int > event_filter_match(struct perf_event *event) > { > return (event->cpu == -1 || event->cpu == smp_processor_id()) > - && perf_cgroup_match(event); > + && perf_cgroup_match(event) && pmu_filter_match(event); > } > > static void > -- > 1.9.1 >
next prev parent reply other threads:[~2015-05-22 14:08 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-05-13 16:12 [PATCH 0/7] ARM: perf: heterogeneous PMU support Mark Rutland 2015-05-13 16:12 ` Mark Rutland 2015-05-13 16:12 ` [PATCH 1/7] perf: allow for PMU-specific event filtering Mark Rutland 2015-05-13 16:12 ` Mark Rutland 2015-05-22 14:08 ` Will Deacon [this message] 2015-05-22 14:08 ` Will Deacon 2015-05-27 8:51 ` Peter Zijlstra 2015-05-27 8:51 ` Peter Zijlstra 2015-05-13 16:12 ` [PATCH 2/7] arm: perf: make of_pmu_irq_cfg take arm_pmu Mark Rutland 2015-05-13 16:12 ` Mark Rutland 2015-05-13 16:12 ` [PATCH 3/7] arm: perf: treat PMUs as CPU affine Mark Rutland 2015-05-13 16:12 ` Mark Rutland 2015-05-13 16:12 ` [PATCH 4/7] arm: perf: filter unschedulable events Mark Rutland 2015-05-13 16:12 ` Mark Rutland 2015-05-13 16:12 ` [PATCH 5/7] arm: perf: probe number of counters on affine CPUs Mark Rutland 2015-05-13 16:12 ` Mark Rutland 2015-05-13 16:12 ` [PATCH 6/7] arm: perf: remove singleton PMU restriction Mark Rutland 2015-05-13 16:12 ` Mark Rutland 2015-05-13 16:12 ` [PATCH 7/7] arm: dts: vexpress: describe all PMUs in TC2 dts Mark Rutland 2015-05-13 16:12 ` Mark Rutland
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=20150522140844.GA1619@arm.com \ --to=will.deacon@arm.com \ --cc=Drew.Richardson@arm.com \ --cc=Liviu.Dudau@arm.com \ --cc=Lorenzo.Pieralisi@arm.com \ --cc=Sudeep.Holla@arm.com \ --cc=acme@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=mingo@redhat.com \ --cc=paulus@samba.org \ --cc=peterz@infradead.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: linkBe 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.