All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leo Yan <leo.yan@arm.com>
To: "Liang, Kan" <kan.liang@linux.intel.com>
Cc: peterz@infradead.org, mingo@redhat.com, namhyung@kernel.org,
	irogers@google.com, mark.rutland@arm.com,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	eranian@google.com, ctshao@google.com, tmricht@linux.ibm.com,
	Aishwarya TCV <aishwarya.tcv@arm.com>,
	Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	Venkat Rao Bagalkote <venkat88@linux.ibm.com>,
	Vince Weaver <vincent.weaver@maine.edu>
Subject: Re: [PATCH V4] perf: Fix the throttle error of some clock events
Date: Mon, 9 Jun 2025 19:36:04 +0100	[thread overview]
Message-ID: <20250609183604.GP8020@e132581.arm.com> (raw)
In-Reply-To: <e763b0bd-cb51-4a76-816d-e12e59b02214@linux.intel.com>

On Mon, Jun 09, 2025 at 09:48:12AM -0400, Liang, Kan wrote:

[...]

> >> Move event->hw.interrupts = MAX_INTERRUPTS before the stop(). It makes
> >> the order the same as perf_event_unthrottle(). Except the patch, no one
> >> checks the hw.interrupts in the stop(). There is no impact from the
> >> order change.
> >>
> >> When stops in the throttle, the event should not be updated,
> >> stop(event, 0).
> > 
> > I am confused for this conclusion. When a CPU or task clock event is
> > stopped by throttling, should it also be updated? Otherwise, we will
> > lose accouting for the period prior to the throttling.
> > 
> > I saw you exchanged with Alexei for a soft lockup issue, the reply [1]
> > shows that skipping event update on throttling does not help to
> > resolve the lockup issue.
> > 
> > Could you elaberate why we don't need to update clock events when
> > throttling?
> > 
> 
> This is to follow the existing behavior before the throttling fix*.
>
> When throttling is triggered, the stop(event, 0); will be invoked.
> As my understanding, it's because the period is not changed with
> throttling. So we don't need to update the period.

> But if the period is changed, the update is required. You may find an
> example in the perf_adjust_freq_unthr_events(). In the freq mode,
> stop(event, PERF_EF_UPDATE) is actually invoked for the triggered event.

> For the clock event, the existing behavior before the throttling fix* is
> not to invoke the stop() in throttling. It relies on the
> HRTIMER_NORESTART instead. My previous throttling fix changes the
> behavior. It invokes both stop() and HRTIMER_NORESTART. Now, this patch
> change the behavior back.

Actually, the "event->count" has been updated in perf_swevent_hrtimer(),
this is why this patch does not cause big deviation if skip updating
count in the ->stop() callback:

  perf_swevent_hrtimer()
   ` event->pmu->read(event);               => Update count
   ` __perf_event_overflow()
      ` perf_event_throttle()
         ` event->pmu->stop(event, 0) / cpu_clock_event_stop()
            ` perf_swevent_cancel_hrtimer() => Skip to cancel timer
            ` task_clock_event_update()     => Skip to update count
   ` return HRTIMER_NORESTART;              => Stop timer

It is a bit urgly that we check the throttling separately in two
places: one is in perf_swevent_cancel_hrtime() for skipping cancel
timer, and then we skip updating event count in
cpu_clock_event_stop().

One solution is it would be fine to update count in ->stop() callback
for the throttling. This should not cause any issue (though it is a bit
redundant that the count is updated twice).

Or even more clear, we can define a flag PERF_EF_THROTTLING:

    #define PERF_EF_THROTTLING  0x20

    event->pmu->stop(event, PERF_EF_THROTTLING);

    cpu_clock_event_stop(struct perf_event *event, int flags)
    {
        if (flags == PERF_EF_THROTTLING)
            return;

        ....
    }

This might need to do a wider checking to ensure this new flags will not
cause any issues.

Thanks,
Leo

  reply	other threads:[~2025-06-09 18:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-06 19:25 [PATCH V4] perf: Fix the throttle error of some clock events kan.liang
2025-06-09  7:43 ` Venkat Rao Bagalkote
2025-06-09 12:34 ` Leo Yan
2025-06-09 13:48   ` Liang, Kan
2025-06-09 18:36     ` Leo Yan [this message]
2025-06-09 19:59       ` Liang, Kan
2025-06-10 12:13         ` Leo Yan
2025-06-11 12:14 ` [tip: perf/urgent] " tip-bot2 for 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=20250609183604.GP8020@e132581.arm.com \
    --to=leo.yan@arm.com \
    --cc=aishwarya.tcv@arm.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=ctshao@google.com \
    --cc=eranian@google.com \
    --cc=irogers@google.com \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tmricht@linux.ibm.com \
    --cc=venkat88@linux.ibm.com \
    --cc=vincent.weaver@maine.edu \
    /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.