linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephane Eranian <eranian@google.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, kim.phillips@amd.com,
	acme@redhat.com, jolsa@redhat.com, songliubraving@fb.com,
	mpe@ellerman.id.au, maddy@linux.ibm.com
Subject: Re: [PATCH v2 03/13] perf/x86/amd: add AMD Fam19h Branch Sampling support
Date: Mon, 29 Nov 2021 14:07:58 -0800	[thread overview]
Message-ID: <CABPqkBSLHS82MM9f9jcLNfYDAR7+j4h2ztm22wjMH11=FM8FcA@mail.gmail.com> (raw)
In-Reply-To: <YZZH+5odIawPQtgJ@hirez.programming.kicks-ass.net>

Peter,

Back from a vacation break. Comments below.

On Thu, Nov 18, 2021 at 4:33 AM Peter Zijlstra <peterz@infradead.org> wrote:
>
> On Thu, Nov 18, 2021 at 01:20:09PM +0100, Peter Zijlstra wrote:
> > On Tue, Nov 16, 2021 at 11:23:39PM -0800, Stephane Eranian wrote:
>
> > > Ok, I made the changes you suggested. It looks closer to the way LBR is handled.
> > > However, this means that there is no path by which you can get to
> > > amd_pmu_disable_event()
> > > without having gone through amd_pmu_disable_all(). Is that always the
> > > case? And same thing
> > > on the enable side.
> >
> > So that's true for ->add() and ->del(), those cannot be called without
> > being wrapped in ->pmu_disable(), ->pmu_enable().
> >
> > There is however the ->stop() and ->start() usage for throttling, which
> > can stop an individual event (while leaving the event scheduled on the
> > PMU). Now, I think the ->stop() gets called with the PMU enabled, but
> > the ->start() is with it disabled again.
>
> I just looked, and the throttling depends on the PMU's PMI handler
> implementation, for Intel it will have the PMU disabled, for generic and
> AMD it has it enabled (see x86_pmu_handle_irq -- also these are really
> NMIs but lets not do a mass rename just now).
>
Yes, I see that too. It has to do with the __perf_event_overflow()
-> __perf_event_account_interrupt() code path which does not call
perf_pmu_disable().
And that's because it knows it is called from PMI and let's the PMI
code decide the state
of the PMU. Unfortunately, on AMD, the PMU is not stopped fully on PMI
and that is because
there is no centralized way of doing this, so you'd have 6 wrmsr x 2
to disable/enable. OTOH,
I don't see the point of monitoring in the PMI code. So there is a
discrepancy between Intel and
AMD here. I think we should fix it.

> > The ramification would be that we'd stop the event, but leave BRS
> > enabled for a throttled event. Which should be harmless, no?

Well, the risk here is that if BRS is left enabled, it may hold the
NMI for up to 16 taken branches.
If the associated event is disabled, then cpuc->events[idx] = NULL.
The BRS drain function checks
for that and does not capture any sample. The brs_drain() function is
called from the PMI handler if
cpuc->lbr_users > 0 which would be the case on the stop() path. I
think this is the only risk we have
on the throttling code path.

There would be no problem if we were to stop/start the PMU in the AMD
PMI handler.

Thanks.

  reply	other threads:[~2021-11-29 22:41 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-11  8:44 [PATCH v2 00/13] perf/x86/amd: Add AMD Fam19h Branch Sampling support Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 01/13] perf/core: add perf_clear_branch_entry_bitfields() helper Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 02/13] x86/cpufeatures: add AMD Fam19h Branch Sampling feature Stephane Eranian
2021-11-11 12:36   ` Borislav Petkov
2021-11-11  8:44 ` [PATCH v2 03/13] perf/x86/amd: add AMD Fam19h Branch Sampling support Stephane Eranian
2021-11-12 16:02   ` Peter Zijlstra
2021-11-16  7:48     ` Stephane Eranian
2021-11-16  8:29       ` Peter Zijlstra
2021-11-17  7:23         ` Stephane Eranian
2021-11-18 12:20           ` Peter Zijlstra
2021-11-18 12:32             ` Peter Zijlstra
2021-11-29 22:07               ` Stephane Eranian [this message]
2021-11-12 16:23   ` Peter Zijlstra
2021-11-12 16:25   ` Peter Zijlstra
2021-11-12 16:39   ` Peter Zijlstra
2021-11-11  8:44 ` [PATCH v2 04/13] perf/x86/amd: add branch-brs helper event for Fam19h BRS Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 05/13] perf/x86/amd: enable branch sampling priv level filtering Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 06/13] perf/x86/amd: add AMD branch sampling period adjustment Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 07/13] perf/x86/amd: make Zen3 branch sampling opt-in Stephane Eranian
2021-11-11  8:44 ` [PATCH 08/13] ACPI: add perf low power callback Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 09/13] perf/x86/amd: add idle hooks for branch sampling Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 10/13] perf tools: add branch-brs as a new event Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 11/13] perf tools: improve IBS error handling Stephane Eranian
2021-11-16 16:46   ` Kim Phillips
2021-11-17  9:15     ` Stephane Eranian
2021-11-18 21:02       ` Kim Phillips
2021-11-11  8:44 ` [PATCH v2 12/13] perf tools: improve error handling of AMD Branch Sampling Stephane Eranian
2021-11-11  8:44 ` [PATCH v2 13/13] perf report: add addr_from/addr_to sort dimensions Stephane Eranian

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='CABPqkBSLHS82MM9f9jcLNfYDAR7+j4h2ztm22wjMH11=FM8FcA@mail.gmail.com' \
    --to=eranian@google.com \
    --cc=acme@redhat.com \
    --cc=jolsa@redhat.com \
    --cc=kim.phillips@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maddy@linux.ibm.com \
    --cc=mpe@ellerman.id.au \
    --cc=peterz@infradead.org \
    --cc=songliubraving@fb.com \
    /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;
as well as URLs for NNTP newsgroup(s).