From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@linux.intel.com>,
James Clark <james.clark@linaro.org>,
Ze Gao <zegao2021@gmail.com>, Weilin Wang <weilin.wang@intel.com>,
Dominique Martinet <asmadeus@codewreck.org>,
Jean-Philippe Romain <jean-philippe.romain@foss.st.com>,
Junhao He <hejunhao3@huawei.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
Aditya Bodkhe <Aditya.Bodkhe1@ibm.com>, Leo Yan <leo.yan@arm.com>,
Thomas Falcon <thomas.falcon@intel.com>,
Atish Patra <atishp@rivosinc.com>
Subject: Re: [PATCH v8 0/4] Prefer sysfs/JSON events also when no PMU is provided
Date: Mon, 2 Jun 2025 21:23:02 -0700 [thread overview]
Message-ID: <aD54ptuIFHcKPkRQ@google.com> (raw)
In-Reply-To: <CAP-5=fU3VW1MjHMiaPG+JirLCCunMC6bEWpsJ3h0E7bTDkh9cA@mail.gmail.com>
Hi Ian,
On Tue, May 27, 2025 at 01:50:32PM -0700, Ian Rogers wrote:
> On Tue, Apr 15, 2025 at 9:51 PM Ian Rogers <irogers@google.com> wrote:
> >
> > At the RISC-V summit the topic of avoiding event data being in the
> > RISC-V PMU kernel driver came up. There is a preference for sysfs/JSON
> > events being the priority when no PMU is provided so that legacy
> > events maybe supported via json. Originally Mark Rutland also
> > expressed at LPC 2023 that doing this would resolve bugs on ARM Apple
> > M? processors, but James Clark more recently tested this and believes
> > the driver issues there may not have existed or have been resolved. In
> > any case, it is inconsistent that with a PMU event names avoid legacy
> > encodings, but when wildcarding PMUs (ie without a PMU with the event
> > name) the legacy encodings have priority.
> >
> > The situation is further inconsistent as legacy events are case
> > sensitive, so on Intel that provides a sysfs instructions event, the
> > instructions event without a PMU and lowercase is legacy while with
> > uppercase letters it matches with sysfs which is case insensitive. Are
> > there legacy events with upper case letters? Yes there are, the cache
> > ones mix case freely:
> >
> > L1-dcache|l1-d|l1d|L1-data|L1-icache|l1-i|l1i|L1-instruction|LLC|L2|dTLB|d-tlb|Data-TLB|iTLB|i-tlb|Instruction-TLB|branch|branches|bpu|btb|bpc|node
> >
> > meaning LLC that means L2 (which is wrong) both match as part of a
> > legacy cache name but llc and l2 would only match sysfs/json
> > events. The whole thing just points at the ridiculous nature of legacy
> > events and why we'd want them to be preffered I don't know. Why should
> > case of a letter or having a PMU prefix impact the encoding in the
> > perf_event_attr?
> >
> > The patch doing this work was reverted in a v6.10 release candidate
> > as, even though the patch was posted for weeks and had been on
> > linux-next for weeks without issue, Linus was in the habit of using
> > explicit legacy events with unsupported precision options on his
> > Neoverse-N1. This machine has SLC PMU events for bus and CPU cycles
> > where ARM decided to call the events bus_cycles and cycles, the latter
> > being also a legacy event name. ARM haven't renamed the cycles event
> > to a more consistent cpu_cycles and avoided the problem. With these
> > changes the problematic event will now be skipped, a large warning
> > produced, and perf record will continue for the other PMU events. This
> > solution was proposed by Arnaldo.
> >
> > v8: Change removing of failed to open events that are tracking so that
> > the tracking moves to the next event. Make software events able to
> > specified with a PMU. Change the perf_api_probe to not load all
> > PMUs through scanning, specify a PMU when parsing events.
> >
> > v7: Expand cover letter, fix a missed core_ok check in the v6
> > rebase. Note, as with v6 there is an alternate series that
> > prioritizes legacy events but that is silly and I'd prefer we
> > didn't do it.
> >
> > v6: Rebase of v5 (dropping already merged patches):
> > https://lore.kernel.org/lkml/20250109222109.567031-1-irogers@google.com/
> > that unusually had an RFC posted for it:
> > https://lore.kernel.org/lkml/Z7Z5kv75BMML2A1q@google.com/
> > Note, this patch conflicts/contradicts:
> > https://lore.kernel.org/lkml/20250312211623.2495798-1-irogers@google.com/
> > that I posted so that we could either consistently prioritize
> > sysfs/json (these patches) or legacy events (the other
> > patches). That lack of event printing and encoding inconsistency
> > is most prominent in the encoding of events like "instructions"
> > which on hybrid are reported as "cpu_core/instructions/" but
> > "instructions" before these patches gets a legacy encoding while
> > "cpu_core/instructions/" gets a sysfs/json encoding. These patches
> > make "instructions" always get a sysfs/json encoding while the
> > alternate patches make it always get a legacy encoding.
> >
> > v5: Follow Namhyung's suggestion and ignore the case where command
> > line dummy events fail to open alongside other events that all
> > fail to open. Note, the Tested-by tags are left on the series as
> > v4 and v5 were changing an error case that doesn't occur in
> > testing but was manually tested by myself.
> >
> > v4: Rework the no events opening change from v3 to make it handle
> > multiple dummy events. Sadly an evlist isn't empty if it just
> > contains dummy events as the dummy event may be used with "perf
> > record -e dummy .." as a way to determine whether permission
> > issues exist. Other software events like cpu-clock would suffice
> > for this, but the using dummy genie has left the bottle.
> >
> > Another problem is that we appear to have an excessive number of
> > dummy events added, for example, we can likely avoid a dummy event
> > and add sideband data to the original event. For auxtrace more
> > dummy events may be opened too. Anyway, this has led to the
> > approach taken in patch 3 where the number of dummy parsed events
> > is computed. If the number of removed/failing-to-open non-dummy
> > events matches the number of non-dummy events then we want to
> > fail, but only if there are no parsed dummy events or if there was
> > one then it must have opened. The math here is hard to read, but
> > passes my manual testing.
> >
> > v3: Make no events opening for perf record a failure as suggested by
> > James Clark and Aditya Bodkhe <Aditya.Bodkhe1@ibm.com>. Also,
> > rebase.
> >
> > v2: Rebase and add tested-by tags from James Clark, Leo Yan and Atish
> > Patra who have tested on RISC-V and ARM CPUs, including the
> > problem case from before.
>
> Ping. Thanks,
> Ian
>
> > Ian Rogers (4):
> > perf record: Skip don't fail for events that don't open
> > perf parse-events: Reapply "Prefer sysfs/JSON hardware events over
> > legacy"
> > perf parse-events: Allow software events to be terms
> > perf perf_api_probe: Avoid scanning all PMUs, try software PMU first
Sorry for the delay. But I think we wanted to move to this instead:
https://lore.kernel.org/linux-perf-users/20250312211623.2495798-1-irogers@google.com/
Thanks,
Namhyung
> >
> > tools/perf/builtin-record.c | 63 +++++++++++++++++++---
> > tools/perf/util/parse-events.c | 47 +++++++++++++----
> > tools/perf/util/parse-events.h | 3 +-
> > tools/perf/util/parse-events.l | 90 ++++++++++++++++++--------------
> > tools/perf/util/parse-events.y | 85 ++++++++++++++++++++++--------
> > tools/perf/util/perf_api_probe.c | 27 +++++++---
> > tools/perf/util/pmu.c | 9 ++--
> > 7 files changed, 235 insertions(+), 89 deletions(-)
> >
> > --
> > 2.49.0.777.g153de2bbd5-goog
> >
next prev parent reply other threads:[~2025-06-03 4:23 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-16 4:51 [PATCH v8 0/4] Prefer sysfs/JSON events also when no PMU is provided Ian Rogers
2025-04-16 4:51 ` [PATCH v8 1/4] perf record: Skip don't fail for events that don't open Ian Rogers
2025-04-16 4:51 ` [PATCH v8 2/4] perf parse-events: Reapply "Prefer sysfs/JSON hardware events over legacy" Ian Rogers
2025-04-16 4:51 ` [PATCH v8 3/4] perf parse-events: Allow software events to be terms Ian Rogers
2025-04-16 4:51 ` [PATCH v8 4/4] perf perf_api_probe: Avoid scanning all PMUs, try software PMU first Ian Rogers
2025-05-27 20:50 ` [PATCH v8 0/4] Prefer sysfs/JSON events also when no PMU is provided Ian Rogers
2025-06-03 4:23 ` Namhyung Kim [this message]
2025-06-03 6:08 ` Ian Rogers
2025-06-03 22:50 ` Namhyung Kim
2025-06-03 23:36 ` Ian Rogers
2025-06-03 23:59 ` Namhyung Kim
2025-06-04 0:26 ` Ian Rogers
2025-06-04 21:08 ` Namhyung Kim
2025-06-04 21:40 ` Ian Rogers
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=aD54ptuIFHcKPkRQ@google.com \
--to=namhyung@kernel.org \
--cc=Aditya.Bodkhe1@ibm.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=asmadeus@codewreck.org \
--cc=atishp@rivosinc.com \
--cc=hejunhao3@huawei.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jean-philippe.romain@foss.st.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=leo.yan@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=thomas.falcon@intel.com \
--cc=weilin.wang@intel.com \
--cc=zegao2021@gmail.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 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.