[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <ff49b3013a4ff7626c6f6ac574f85348c35ccc42.camel@infradead.org>
Date: Wed, 14 Jan 2026 17:25:37 +0000
From: David Woodhouse <dwmw2@...radead.org>
To: Fernand Sieber <sieberf@...zon.com>, peterz@...radead.org
Cc: abusse@...zon.de, bp@...en8.de, dave.hansen@...ux.intel.com,
hborghor@...zon.de, hpa@...or.com, jschoenh@...zon.de, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org, mingo@...hat.com, nh-open-source@...zon.com,
nsaenz@...zon.com, pbonzini@...hat.com, seanjc@...gle.com,
stable@...r.kernel.org, tglx@...utronix.de, x86@...nel.org
Subject: Re: [PATCH v2] perf/x86/intel: Do not enable BTS for guests
On Thu, 2025-12-11 at 20:36 +0200, Fernand Sieber wrote:
> By default when users program perf to sample branch instructions
> (PERF_COUNT_HW_BRANCH_INSTRUCTIONS) with a sample period of 1, perf
> interprets this as a special case and enables BTS (Branch Trace Store)
> as an optimization to avoid taking an interrupt on every branch.
>
> Since BTS doesn't virtualize, this optimization doesn't make sense when
> the request originates from a guest. Add an additional check that
> prevents this optimization for virtualized events (exclude_host).
>
> Reported-by: Jan H. Schönherr <jschoenh@...zon.de>
> Suggested-by: Peter Zijlstra <peterz@...radead.org>
> Signed-off-by: Fernand Sieber <sieberf@...zon.com>
Did this get applied?
I think you want Cc: stable@...r.kernel.org here in the body of the
commit itself, not just on the actual email.
> ---
> arch/x86/events/perf_event.h | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
> index 3161ec0a3416..f2e2d9b03367 100644
> --- a/arch/x86/events/perf_event.h
> +++ b/arch/x86/events/perf_event.h
> @@ -1574,13 +1574,22 @@ static inline bool intel_pmu_has_bts_period(struct perf_event *event, u64 period
> struct hw_perf_event *hwc = &event->hw;
> unsigned int hw_event, bts_event;
>
> - if (event->attr.freq)
> + /*
> + * Only use BTS for fixed rate period==1 events.
> + */
> + if (event->attr.freq || period != 1)
> + return false;
> +
> + /*
> + * BTS doesn't virtualize.
> + */
> + if (event->attr.exclude_host)
> return false;
>
> hw_event = hwc->config & INTEL_ARCH_EVENT_MASK;
> bts_event = x86_pmu.event_map(PERF_COUNT_HW_BRANCH_INSTRUCTIONS);
>
> - return hw_event == bts_event && period == 1;
> + return hw_event == bts_event;
> }
>
> static inline bool intel_pmu_has_bts(struct perf_event *event)
Download attachment "smime.p7s" of type "application/pkcs7-signature" (5069 bytes)
Powered by blists - more mailing lists