Re: [PATCH 11/13] perf: Simplify perf_adjust_freq_unthr_context()

From: Peter Zijlstra
Date: Wed Nov 15 2023 - 05:31:50 EST


On Fri, Nov 03, 2023 at 06:14:32PM -0700, Namhyung Kim wrote:
> On Thu, Nov 2, 2023 at 8:32 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> >
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
> > ---
> > kernel/events/core.c | 51 +++++++++++++++++++++++----------------------------
> > 1 file changed, 23 insertions(+), 28 deletions(-)
> >
> > --- a/kernel/events/core.c
> > +++ b/kernel/events/core.c
> > @@ -4090,7 +4090,7 @@ perf_adjust_freq_unthr_context(struct pe
> > if (!(ctx->nr_freq || unthrottle))
> > return;
> >
> > - raw_spin_lock(&ctx->lock);
> > + guard(raw_spinlock)(&ctx->lock);
> >
> > list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
> > if (event->state != PERF_EVENT_STATE_ACTIVE)
> > @@ -4100,7 +4100,7 @@ perf_adjust_freq_unthr_context(struct pe
> > if (!event_filter_match(event))
> > continue;
> >
> > - perf_pmu_disable(event->pmu);
> > + guard(perf_pmu_disable)(event->pmu);
> >
> > hwc = &event->hw;
> >
> > @@ -4110,34 +4110,29 @@ perf_adjust_freq_unthr_context(struct pe
> > event->pmu->start(event, 0);
> > }
> >
> > - if (!event->attr.freq || !event->attr.sample_freq)
> > - goto next;
> > + if (event->attr.freq && event->attr.sample_freq) {
>
> Any reason for this change? I think we can just change the
> 'goto next' to 'continue', no?

Linus initially got confused about the life-time of for-loop scopes, but
yeah, this could be continue just fine.

> Also I think this code needs changes to optimize the access.
> A similar reason for the cgroup switch, it accesses all the
> pmu/events in the context even before checking the sampling
> frequency. This is bad for uncore PMUs (and KVM too).
>
> But this is a different issue..

Right, lets do that in another patch. Also, there seems to be a problem
with the cgroup thing :/