From: James Clark <james.clark@linaro.org>
To: Ian Rogers <irogers@google.com>
Cc: Andi Kleen <ak@linux.intel.com>,
"Liang, Kan" <kan.liang@linux.intel.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Benjamin Gray <bgray@linux.ibm.com>,
Caleb Biggers <caleb.biggers@intel.com>,
Edward Baker <edward.baker@intel.com>,
Ingo Molnar <mingo@redhat.com>,
Jing Zhang <renyu.zj@linux.alibaba.com>,
Jiri Olsa <jolsa@kernel.org>,
John Garry <john.g.garry@oracle.com>, Leo Yan <leo.yan@arm.com>,
Namhyung Kim <namhyung@kernel.org>,
Perry Taylor <perry.taylor@intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Samantha Alt <samantha.alt@intel.com>,
Sandipan Das <sandipan.das@amd.com>,
Thomas Falcon <thomas.falcon@intel.com>,
Weilin Wang <weilin.wang@intel.com>, Xu Yang <xu.yang_2@nxp.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH v9 46/48] perf jevents: Add collection of topdown like metrics for arm64
Date: Mon, 15 Dec 2025 15:24:41 +0200 [thread overview]
Message-ID: <5acc2e4a-abac-439c-81b0-9095f660833e@linaro.org> (raw)
In-Reply-To: <CAP-5=fXwCoOQS=E_o34oQivXMC8RAOo8we4xk9CuL_Pa=pKOVA@mail.gmail.com>
On 09/12/2025 23:23, Ian Rogers wrote:
> On Tue, Dec 9, 2025 at 3:31 AM James Clark <james.clark@linaro.org> wrote:
>>
>> On 02/12/2025 5:50 pm, Ian Rogers wrote:
>>> Metrics are created using legacy, common and recommended events. As
>>> events may be missing a TryEvent function will give None if an event
>>> is missing. To workaround missing JSON events for cortex-a53, sysfs
>>> encodings are used.
>>>
>>> Signed-off-by: Ian Rogers <irogers@google.com>
>>> ---
>>> An earlier review of this patch by Leo Yan is here:
>>> https://lore.kernel.org/lkml/8168c713-005c-4fd9-a928-66763dab746a@arm.com/
>>> Hopefully all corrections were made.
>>> ---
>>> tools/perf/pmu-events/arm64_metrics.py | 145 ++++++++++++++++++++++++-
>>> 1 file changed, 142 insertions(+), 3 deletions(-)
>>>
>> [...]
>>> + MetricGroup("lpm_topdown_be_bound", [
>>> + MetricGroup("lpm_topdown_be_dtlb", [
>>> + Metric("lpm_topdown_be_dtlb_walks", "Dtlb walks per instruction",
>>> + d_ratio(dtlb_walk, ins_ret), "walk/insn"),
>>> + Metric("lpm_topdown_be_dtlb_walk_rate", "Dtlb walks per L1D TLB access",
>>> + d_ratio(dtlb_walk, l1d_tlb) if l1d_tlb else None, "100%"),
>>> + ]) if dtlb_walk else None,
>>> + MetricGroup("lpm_topdown_be_mix", [
>>> + Metric("lpm_topdown_be_mix_ld", "Percentage of load instructions",
>>> + d_ratio(ld_spec, inst_spec), "100%") if ld_spec else None,
>>> + Metric("lpm_topdown_be_mix_st", "Percentage of store instructions",
>>> + d_ratio(st_spec, inst_spec), "100%") if st_spec else None,
>>> + Metric("lpm_topdown_be_mix_simd", "Percentage of SIMD instructions",
>>> + d_ratio(ase_spec, inst_spec), "100%") if ase_spec else None,
>>> + Metric("lpm_topdown_be_mix_fp",
>>> + "Percentage of floating point instructions",
>>> + d_ratio(vfp_spec, inst_spec), "100%") if vfp_spec else None,
>>> + Metric("lpm_topdown_be_mix_dp",
>>> + "Percentage of data processing instructions",
>>> + d_ratio(dp_spec, inst_spec), "100%") if dp_spec else None,
>>> + Metric("lpm_topdown_be_mix_crypto",
>>> + "Percentage of data processing instructions",
>>> + d_ratio(crypto_spec, inst_spec), "100%") if crypto_spec else None,
>>> + Metric(
>>> + "lpm_topdown_be_mix_br", "Percentage of branch instructions",
>>> + d_ratio(br_immed_spec + br_indirect_spec + br_ret_spec,
>>> + inst_spec), "100%") if br_immed_spec and br_indirect_spec and br_ret_spec else None,
>>
>> Hi Ian,
>>
>> I've been trying to engage with the team that's publishing the metrics
>> in Arm [1] to see if there was any chance in getting some unity between
>> these new metrics and their existing json ones. The feedback from them
>> was that the decision to only publish metrics for certain cores is
>> deliberate and there is no plan to change anything. The metrics there
>> are well tested, known to be working, and usually contain workarounds
>> for specific issues. They don't want to do "Arm wide" common metrics for
>> existing cores as they believe it has more potential to mislead people
>> than help.
>
> So this is sad, but I'll drop the patch from the series so as not to
> delay things and keep carrying it in Google's tree. Just looking in
> tools/perf/pmu-events/arch/arm64/arm there are 20 ARM models of which
> only neoverse models (5 of the 20) have metrics. Could ARM's metric
> people step up to fill the void? Models like cortex-a76 are actively
> sold in the Raspberry Pi 5 and yet lack metrics.
I don't know of any plan to do so, although it's obviously possible. I
think if some kind of official request came through some customer
(including Google) then it could happen. But it looks like nobody is
really asking for it so it wasn't done and that's how the decision was made.
>
> I think there has to be a rule at some point of, "don't let perfect be
> the enemy of good." There's no implication that ARM should maintain
> these metrics and they be perfect just as there isn't an implication
> that ARM should maintain the legacy metrics like
> "stalled_cycles_per_instruction":
> https://web.git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/tree/tools/perf/pmu-events/arch/common/common/metrics.json?h=perf-tools-next#n49
>
I kind of agree, I'm not saying to definitely not add these metrics.
Just making sure that you're aware of the potential for some issues and
conflicts going forwards.
As you say, the bugs can always be fixed. It's just that now we have to
do it in two places.
> I'm guessing the cycles breakdown:
> https://lore.kernel.org/lkml/20251202175043.623597-48-irogers@google.com/
> is okay and will keep that for ARM.
>
Yes this one looks fine.
>> I'm commenting on this "lpm_topdown_be_mix_br" as one example, that the
>> equivalent Arm metric "branch_percentage" excludes br_ret_spec because
>> br_indirect_spec also counts returns. Or on neoverse-n3 it's
>> "PC_WRITE_SPEC / INST_SPEC".
>
> This is the value in upstreaming metrics like this, to bug fix. This
> is what has happened with the AMD and Intel metrics. I'm happy we can
> deliver more metrics to users on those CPUs.
>
>> I see that you've prefixed all the metrics so the names won't clash from
>> Kan's feedback [2]. But it makes me wonder if at some point some kind of
>> alias list could be implemented to override the generated metrics with
>> hand written json ones. But by that point why not just use the same
>> names? The Arm metric team's feedback was that there isn't really an
>> industry standard for naming, and that differences between architectures
>> would make it almost impossible to standardise anyway in their opinion.
>
> So naming is always a challenge. One solution here is the ilist
> application. When doing the legacy event reorganization I remember you
> arguing that legacy events should be the norm and not the exception,
> but it is because of all the model quirks precisely why that doesn't
> work. By working through the quirks with cross platform metrics,
> that's value to users and not misleading. If it does mislead then
> that's a bug, let's fix it. Presenting users with no data isn't a fix
> nor being particularly helpful.
>
>> But here we're adding duplicate metrics with different names, where the
>> new ones are known to have issues. It's not a great user experience IMO,
>> but at the same time missing old cores from the Arm metrics isn't a
>> great user experience either. I actually don't have a solution, other
>> than to say I tried to get them to consider more unified naming.
>
> So the lpm_ metrics are on top of whatever a vendor wants to add.
> There are often more than one way to compute a metric, such as memory
> controller counters vs l3 cache, on Intel an lpm_ metric may use
> uncore counters while a tma_ metric uses the cache. I don't know if
> sticking "ARM doesn't support this" in all the ARM lpm_ metric
> descriptions would mitigate your metric creators' concerns, it is
Probably not necessary to do that no, but maybe some kind of header or
documentation about what "lpm_" stands for would be good. I don't know
if we'd expect users to know about the subtle differences or what lpm
stands for?
> something implied by Linux's licensing. We do highlight metrics that
> contain experimental events, such as on Intel, should be considered
> similarly experimental.
>
>> I also have to say that I do still agree with Andi's old feedback [3]
>> that the existing json was good enough, and maybe this isn't the right
>> direction, although it's not very useful feedback at this point. I
>> thought I had replied to that thread long ago, but must not have pressed
>> send, sorry about that.
>
> So having handwritten long metrics in json it's horrid, Having been
> there I wouldn't want to be doing more of it. No comments, no line
> breaks, huge potential for typos, peculiar rules on when commas are
> allowed (so removing a line breaks parsing), .. This is why we have
> make_legacy_cache.py
> https://web.git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/tree/tools/perf/pmu-events/make_legacy_cache.py?h=perf-tools-next
> writing 1216 legacy cache event descriptions (7266 lines of json) vs
> 129 lines of python. I'm going to be on team python all day long. In
> terms of the Linux build, I don't think there's a reasonable
> alternative language.
>
> Thanks,
> Ian
>
Comments and line breaks could have been worked around by bodging the
json parser or moving to yaml or something. But yes having a big formula
in a one line string with conditionals wasn't that great. The biggest
problem I think this fixes is the fact that it fills in missing metrics.
It does however make it harder to autogenerate using any formulas
published elsewhere. Whether that's actually an issue or not I don't
know because these are going to be changing much less frequently than
something like the event names that are published in json (and there's
fewer metrics than events as well).
>
>> [1]:
>> https://gitlab.arm.com/telemetry-solution/telemetry-solution/-/tree/main/data
>> [2]:
>> https://lore.kernel.org/lkml/43548903-b7c8-47c4-b1da-0258293ecbd4@linux.intel.com
>> [3]: https://lore.kernel.org/lkml/ZeJJyCmXO9GxpDiF@tassilo/
>>
next prev parent reply other threads:[~2025-12-15 13:24 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-02 17:49 [PATCH v9 00/48] AMD, ARM, Intel metric generation with Python Ian Rogers
2025-12-02 17:49 ` [PATCH v9 01/48] perf python: Correct copying of metric_leader in an evsel Ian Rogers
2025-12-02 17:49 ` [PATCH v9 02/48] perf ilist: Be tolerant of reading a metric on the wrong CPU Ian Rogers
2025-12-02 17:49 ` [PATCH v9 03/48] perf jevents: Allow multiple metricgroups.json files Ian Rogers
2025-12-02 17:49 ` [PATCH v9 04/48] perf jevents: Update metric constraint support Ian Rogers
2025-12-02 17:50 ` [PATCH v9 05/48] perf jevents: Add descriptions to metricgroup abstraction Ian Rogers
2025-12-02 17:50 ` [PATCH v9 06/48] perf jevents: Allow metric groups not to be named Ian Rogers
2025-12-02 17:50 ` [PATCH v9 07/48] perf jevents: Support parsing negative exponents Ian Rogers
2025-12-02 17:50 ` [PATCH v9 08/48] perf jevents: Term list fix in event parsing Ian Rogers
2025-12-02 17:50 ` [PATCH v9 09/48] perf jevents: Add threshold expressions to Metric Ian Rogers
2025-12-02 17:50 ` [PATCH v9 10/48] perf jevents: Move json encoding to its own functions Ian Rogers
2025-12-02 17:50 ` [PATCH v9 11/48] perf jevents: Drop duplicate pending metrics Ian Rogers
2025-12-02 17:50 ` [PATCH v9 12/48] perf jevents: Skip optional metrics in metric group list Ian Rogers
2025-12-02 17:50 ` [PATCH v9 13/48] perf jevents: Build support for generating metrics from python Ian Rogers
2025-12-02 17:50 ` [PATCH v9 14/48] perf jevents: Add load event json to verify and allow fallbacks Ian Rogers
2025-12-02 17:50 ` [PATCH v9 15/48] perf jevents: Add RAPL event metric for AMD zen models Ian Rogers
2025-12-02 17:50 ` [PATCH v9 16/48] perf jevents: Add idle " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 17/48] perf jevents: Add upc metric for uops per cycle for AMD Ian Rogers
2025-12-08 9:46 ` Sandipan Das
2025-12-02 17:50 ` [PATCH v9 18/48] perf jevents: Add br metric group for branch statistics on AMD Ian Rogers
2025-12-08 12:42 ` Sandipan Das
2025-12-02 17:50 ` [PATCH v9 19/48] perf jevents: Add itlb metric group for AMD Ian Rogers
2025-12-02 17:50 ` [PATCH v9 20/48] perf jevents: Add dtlb " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 21/48] perf jevents: Add uncore l3 " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 22/48] perf jevents: Add load store breakdown metrics ldst " Ian Rogers
2025-12-08 9:21 ` Sandipan Das
2025-12-02 17:50 ` [PATCH v9 23/48] perf jevents: Add context switch metrics " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 24/48] perf jevents: Add RAPL metrics for all Intel models Ian Rogers
2025-12-02 17:50 ` [PATCH v9 25/48] perf jevents: Add idle metric for " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 26/48] perf jevents: Add CheckPmu to see if a PMU is in loaded json events Ian Rogers
2025-12-02 17:50 ` [PATCH v9 27/48] perf jevents: Add smi metric group for Intel models Ian Rogers
2025-12-02 17:50 ` [PATCH v9 28/48] perf jevents: Mark metrics with experimental events as experimental Ian Rogers
2025-12-02 17:50 ` [PATCH v9 29/48] perf jevents: Add tsx metric group for Intel models Ian Rogers
2025-12-02 17:50 ` [PATCH v9 30/48] perf jevents: Add br metric group for branch statistics on Intel Ian Rogers
2025-12-02 17:50 ` [PATCH v9 31/48] perf jevents: Add software prefetch (swpf) metric group for Intel Ian Rogers
2025-12-02 17:50 ` [PATCH v9 32/48] perf jevents: Add ports metric group giving utilization on Intel Ian Rogers
2025-12-02 17:50 ` [PATCH v9 33/48] perf jevents: Add L2 metrics for Intel Ian Rogers
2025-12-02 17:50 ` [PATCH v9 34/48] perf jevents: Add load store breakdown metrics ldst " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 35/48] perf jevents: Add ILP metrics " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 36/48] perf jevents: Add context switch " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 37/48] perf jevents: Add FPU " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 38/48] perf jevents: Add Miss Level Parallelism (MLP) metric " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 39/48] perf jevents: Add mem_bw " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 40/48] perf jevents: Add local/remote "mem" breakdown metrics " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 41/48] perf jevents: Add dir " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 42/48] perf jevents: Add C-State metrics from the PCU PMU " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 43/48] perf jevents: Add local/remote miss latency metrics " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 44/48] perf jevents: Add upi_bw metric " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 45/48] perf jevents: Add mesh bandwidth saturation " Ian Rogers
2025-12-02 17:50 ` [PATCH v9 46/48] perf jevents: Add collection of topdown like metrics for arm64 Ian Rogers
2025-12-09 11:31 ` James Clark
2025-12-09 21:23 ` Ian Rogers
2025-12-15 13:24 ` James Clark [this message]
2025-12-02 17:50 ` [PATCH v9 47/48] perf jevents: Add cycles breakdown metric for arm64/AMD/Intel Ian Rogers
2025-12-02 17:50 ` [PATCH v9 48/48] perf jevents: Validate that all names given an Event Ian Rogers
2025-12-03 17:59 ` [PATCH v9 00/48] AMD, ARM, Intel metric generation with Python Namhyung Kim
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=5acc2e4a-abac-439c-81b0-9095f660833e@linaro.org \
--to=james.clark@linaro.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=bgray@linux.ibm.com \
--cc=caleb.biggers@intel.com \
--cc=edward.baker@intel.com \
--cc=eranian@google.com \
--cc=irogers@google.com \
--cc=john.g.garry@oracle.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=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=perry.taylor@intel.com \
--cc=peterz@infradead.org \
--cc=renyu.zj@linux.alibaba.com \
--cc=samantha.alt@intel.com \
--cc=sandipan.das@amd.com \
--cc=thomas.falcon@intel.com \
--cc=weilin.wang@intel.com \
--cc=xu.yang_2@nxp.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).