From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Namhyung Kim <namhyung@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>
Subject: Re: [PATCH v6 0/2] Prefer sysfs/JSON events also when no PMU is provided
Date: Tue, 29 Apr 2025 12:14:17 -0300 [thread overview]
Message-ID: <aBDsyY-iMT5CBg4i@x1> (raw)
In-Reply-To: <CAP-5=fWr8EUyro8ckxfMYWR3BhiXgzkjejTjmTb=8PR1p+wvWA@mail.gmail.com>
On Thu, Mar 27, 2025 at 12:13:45PM -0700, Ian Rogers wrote:
> On Mon, Mar 24, 2025 at 9:46 AM 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 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.
> >
> > 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.
>
> So another fun finding. Sysfs and json events are case insensitive:
> ```
> $ perf stat -e 'inst_retired.any,INST_RETIRED.ANY' true
>
> Performance counter stats for 'true':
>
> 129,134 cpu_atom/inst_retired.any:u/
> <not counted> cpu_core/inst_retired.any:u/
> (0.00%)
> 129,134 cpu_atom/INST_RETIRED.ANY:u/
> <not counted> cpu_core/INST_RETIRED.ANY:u/
> (0.00%)
>
> 0.002193191 seconds time elapsed
>
> 0.002354000 seconds user
> 0.000000000 seconds sys
> ```
> But legacy events match in lex code that is case sensitive. This means
> (on x86) the event 'instructions' is currently legacy, but the event
> 'INSTRUCTIONS' is a sysfs event. The event CYCLES is a parse error as
> there is no sysfs/json version. Given legacy events don't follow the
> case insensitivity norm this is more evidence we need to reduce their
> priority by merging these patches.
root@number:~# perf trace -e perf_event_open perf stat -C 1 -e INSTRUCTIONS,instructions,cycles sleep 1
0.000 ( 0.025 ms): :620592/620592 perf_event_open(attr_uptr: { type: 4 (cpu), size: 136, config: 0xc0 (instructions), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1 }, pid: -1, cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 3
0.030 ( 0.004 ms): :620592/620592 perf_event_open(attr_uptr: { type: 0 (PERF_TYPE_HARDWARE), size: 136, config: 0x1 (PERF_COUNT_HW_INSTRUCTIONS), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1 }, pid: -1, cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 8
0.035 ( 0.003 ms): :620592/620592 perf_event_open(attr_uptr: { type: 0 (PERF_TYPE_HARDWARE), size: 136, config: 0 (PERF_COUNT_HW_CPU_CYCLES), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1 }, pid: -1, cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 9
Performance counter stats for 'CPU(s) 1':
1,499,102 INSTRUCTIONS
1,498,883 instructions # 0.81 insn per cycle
1,850,082 cycles
1.001553577 seconds time elapsed
root@number:~#
So the behaviour if "instructions" is specified, since perf started, is
to have this:
0.030 ( 0.004 ms): :620592/620592 perf_event_open(attr_uptr: { type: 0 (PERF_TYPE_HARDWARE), size: 136, config: 0x1 (PERF_COUNT_HW_INSTRUCTIONS), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1 }, pid: -1, cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 8
And this is what we continue to obtain.
At some point we started supporting sysfs/JSON and then INSTRUCTIONS
started being accepted and we are getting:
0.000 ( 0.025 ms): :620592/620592 perf_event_open(attr_uptr: { type: 4 (cpu), size: 136, config: 0xc0 (instructions), sample_type: IDENTIFIER, read_format: TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING, disabled: 1, inherit: 1 }, pid: -1, cpu: 1, group_fd: -1, flags: FD_CLOEXEC) = 3
Which is what is expected, no change in behaviour over time.
- Arnaldo
next prev parent reply other threads:[~2025-04-29 15:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-24 16:45 [PATCH v6 0/2] Prefer sysfs/JSON events also when no PMU is provided Ian Rogers
2025-03-24 16:45 ` [PATCH v6 1/2] perf record: Skip don't fail for events that don't open Ian Rogers
2025-03-24 16:45 ` [PATCH v6 2/2] perf parse-events: Reapply "Prefer sysfs/JSON hardware events over legacy" Ian Rogers
2025-03-27 19:13 ` [PATCH v6 0/2] Prefer sysfs/JSON events also when no PMU is provided Ian Rogers
2025-04-29 15:14 ` Arnaldo Carvalho de Melo [this message]
2025-04-29 15:47 ` 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=aBDsyY-iMT5CBg4i@x1 \
--to=acme@kernel.org \
--cc=Aditya.Bodkhe1@ibm.com \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=asmadeus@codewreck.org \
--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=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--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.