From: Peter Zijlstra <peterz@infradead.org>
To: Stephane Eranian <eranian@google.com>
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: Fri, 12 Nov 2021 17:39:19 +0100 [thread overview]
Message-ID: <YY6YtwqSIWxP7GfR@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20211111084415.663951-4-eranian@google.com>
On Thu, Nov 11, 2021 at 12:44:05AM -0800, Stephane Eranian wrote:
> +/*
> + * Because of the way BRS operates with an inactive and active phases, and
> + * the link to one counter, it is not possible to have two events using BRS
> + * scheduled at the same time. There would be an issue with enforcing the
> + * period of each one and given that the BRS saturates, it would not be possible
> + * to guarantee correlated content for all events. Therefore, in situations
> + * where multiple events want to use BRS, the kernel enforces mutual exclusion.
> + * Exclusion is enforced by chosing only one counter for events using BRS.
> + * The event scheduling logic will then automatically multiplex the
> + * events and ensure that at most one event is actively using BRS.
> + *
> + * The BRS counter could be any counter, but there is no constraint on Fam19h,
> + * therefore all counters are equal and thus we pick the first one: PMC0
> + */
> +static struct event_constraint amd_fam19h_brs_cntr0_constraint =
> + EVENT_CONSTRAINT(0, 0x1, AMD64_RAW_EVENT_MASK);
> +
> +static struct event_constraint amd_fam19h_brs_pair_cntr0_constraint =
> + __EVENT_CONSTRAINT(0, 0x1, AMD64_RAW_EVENT_MASK, 1, 0, PERF_X86_EVENT_PAIR);
> +
> +static struct event_constraint *
> +amd_get_event_constraints_f19h(struct cpu_hw_events *cpuc, int idx,
> + struct perf_event *event)
> +{
> + struct hw_perf_event *hwc = &event->hw;
> + bool has_brs = is_amd_brs(hwc);
> +
> + /*
> + * In case BRS is used with an event requiring a counter pair,
> + * the kernel allows it but only on counter 0 & 1 to enforce
> + * multiplexing requiring to protect BRS in case of multiple
> + * BRS users
> + */
> + if (amd_is_pair_event_code(hwc)) {
> + return has_brs ? &amd_fam19h_brs_pair_cntr0_constraint
> + : &pair_constraint;
> + }
> +
> + if (has_brs)
> + return &amd_fam19h_brs_cntr0_constraint;
> +
> + return &unconstrained;
> +}
That still allows BRS to be used together with unrelated counters and it
*will* destroy their utility by delaying the NMI.
BRS could perhaps share the PMU with !sampling counters, but sharing
with sampling counters is just asking for trouble.
next prev parent reply other threads:[~2021-11-12 16:39 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
2021-11-12 16:23 ` Peter Zijlstra
2021-11-12 16:25 ` Peter Zijlstra
2021-11-12 16:39 ` Peter Zijlstra [this message]
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=YY6YtwqSIWxP7GfR@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=acme@redhat.com \
--cc=eranian@google.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=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