From: Leo Yan <leo.yan@arm.com>
To: James Clark <james.clark@linaro.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Jonathan Corbet <corbet@lwn.net>, Marc Zyngier <maz@kernel.org>,
Oliver Upton <oliver.upton@linux.dev>,
Joey Gouly <joey.gouly@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Zenghui Yu <yuzenghui@huawei.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
linux-doc@vger.kernel.org, kvmarm@lists.linux.dev
Subject: Re: [PATCH 07/10] perf: arm_spe: Add support for filtering on data source
Date: Tue, 20 May 2025 17:10:03 +0100 [thread overview]
Message-ID: <20250520161003.GT412060@e132581.arm.com> (raw)
In-Reply-To: <443141db-6950-4a15-83be-ad9e9c0e03a0@linaro.org>
On Tue, May 20, 2025 at 04:00:59PM +0100, James Clark wrote:
> On 20/05/2025 2:46 pm, Leo Yan wrote:
> > On Tue, May 06, 2025 at 12:41:39PM +0100, James Clark wrote:
> > > SPE_FEAT_FDS adds the ability to filter on the data source of packets.
> > > Like the other existing filters, enable filtering with PMSFCR_EL1.FDS
> > > when any of the filter bits are set.
> > >
> > > Each bit maps to data sources 0-63 described by bits[0:5] in the data
> > > source packet (although the full range of data source is 16 bits so
> > > higher value data sources can't be filtered on). The filter is an OR of
> > > all the bits, so for example setting bits 0 and 3 filters packets from
> > > data sources 0 OR 3.
> >
> > As Arm ARM says:
> >
> > 0b0 : If PMSFCR_EL1.FDS is 1, do not record load operations that have
> > bits [5:0] of the Data Source packet set to <m>.
> > 0b1 : Load operations with Data Source <m> are unaffected by
> > PMSFCR_EL1.FDS.
> >
> > We need extra handling for this configuration (0b0 means filtering,
> > 0b1 means no affaction):
> >
> > - By default, the driver should set all bits in the 'data_src_filter'
> > field.
> >
> > - The perf tool needs an extra patch in userspace to initialize all
> > bits in config4 unless user specify other values.
> >
>
> Did you take into account PMSFCR_EL1.FDS being set automatically?
Good point. TBH, I did not give it enough consideration until your
remdinding, but let me elaborate on why I suggested the approach above.
> I think the wording is slightly confusing but I tested it on the model and it works.
>
> If PMSFCR_EL1.FDS == 0 then PMSDSFR_EL1 does nothing, and if the data source
> filter isn't set by the user then FDS isn't set so there's no need to set
> all the bits in the filter to 1. Once the user asks for any filter then we
> set FDS, at which point it's whatever filter they asked for. They can set
> all the bits if they want, or just one.
>
> This is same way PMSFCR_EL1.FT already works. If the user asks for any
> filter then it's set automatically, but we don't allow the user to ask for
> "no filters" but with FT set.
>
> So the only thing we can't do is filter out samples with _any_ data source.
> Which would be PMSFCR_EL1.FDS == 1 and PMSDSFR_EL1 == 0. But I don't think
> that's useful, and there are other filters to get you all or most of the way
> there.
My suggestion is coming for handling the case you mentioned. Let us see
the combinations:
PMSFCR_EL1.FDS == 0
PMSDSFR_EL1 == 0xFFFF,FFFF,FFFF,FFFF
No filtering on data source
PMSFCR_EL1.FDS == 1
PMSDSFR_EL1 == 0xFFFF,FFFF,FFFF,FFFF
No filtering on data source
PMSFCR_EL1.FDS == 0
PMSDSFR_EL1 == 0x0
No filtering on data source
PMSFCR_EL1.FDS == 1
PMSDSFR_EL1 == 0x0
Filtering on all data source
If 'PMSFCR_EL1.FDS == 0 and PMSDSFR_EL1 == 0xFFFF,FFFF,FFFF,FFFF' is
initialized state, when a user set all bits to '1' for the data source
filter, then no matter we enable or disable FDS bit, it can work as
expected for disabling filtering.
If 'PMSFCR_EL1.FDS == 0 and PMSDSFR_EL1 == 0x0' is the init state, as
you said, when user passed 0xFFFF,FFFF,FFFF,FFFF for data filter, we
cannot distinguish it from the init state, as a result, we will fail
to handle this case.
How about you think?
Thanks,
Leo
next prev parent reply other threads:[~2025-05-20 16:10 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-06 11:41 [PATCH 00/10] perf: arm_spe: Armv8.8 SPE features James Clark
2025-05-06 11:41 ` [PATCH 01/10] arm64: sysreg: Add new PMSIDR_EL1 and PMSFCR_EL1 fields James Clark
2025-05-16 14:38 ` Marc Zyngier
2025-05-19 8:16 ` James Clark
2025-05-06 11:41 ` [PATCH 02/10] perf: arm_spe: Support FEAT_SPEv1p4 filters James Clark
2025-05-20 10:07 ` Leo Yan
2025-05-06 11:41 ` [PATCH 03/10] perf: arm_spe: Add support for FEAT_SPE_EFT extended filtering James Clark
2025-05-20 10:35 ` Leo Yan
2025-05-06 11:41 ` [PATCH 04/10] arm64/boot: Enable EL2 requirements for SPE_FEAT_FDS James Clark
2025-05-20 11:04 ` Leo Yan
2025-05-20 13:21 ` James Clark
2025-05-06 11:41 ` [PATCH 05/10] KVM: arm64: Add trap configs for PMSDSFR_EL1 James Clark
2025-05-06 11:41 ` [PATCH 06/10] perf: Add perf_event_attr::config4 James Clark
2025-05-20 11:44 ` Leo Yan
2025-05-06 11:41 ` [PATCH 07/10] perf: arm_spe: Add support for filtering on data source James Clark
2025-05-20 11:43 ` Leo Yan
2025-05-20 13:24 ` James Clark
2025-05-20 13:46 ` Leo Yan
2025-05-20 15:00 ` James Clark
2025-05-20 16:10 ` Leo Yan [this message]
2025-05-20 16:22 ` Leo Yan
2025-05-21 8:54 ` James Clark
2025-05-21 9:51 ` Leo Yan
2025-05-06 11:41 ` [PATCH 08/10] tools headers UAPI: Sync linux/perf_event.h with the kernel sources James Clark
2025-05-06 11:41 ` [PATCH 09/10] perf tools: Add support for perf_event_attr::config4 James Clark
2025-05-20 13:18 ` Leo Yan
2025-05-06 11:41 ` [PATCH 10/10] perf docs: arm-spe: Document new SPE filtering features James Clark
2025-05-20 14:27 ` Leo Yan
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=20250520161003.GT412060@e132581.arm.com \
--to=leo.yan@arm.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=joey.gouly@arm.com \
--cc=jolsa@kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=peterz@infradead.org \
--cc=suzuki.poulose@arm.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.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).