From: Ian Rogers <irogers@google.com>
To: 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>,
Ian Rogers <irogers@google.com>, Ingo Molnar <mingo@redhat.com>,
James Clark <james.clark@linaro.org>,
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
Subject: [PATCH v9 00/48] AMD, ARM, Intel metric generation with Python
Date: Tue, 2 Dec 2025 09:49:55 -0800 [thread overview]
Message-ID: <20251202175043.623597-1-irogers@google.com> (raw)
Metrics in the perf tool come in via json. Json doesn't allow
comments, line breaks, etc. making it an inconvenient way to write
metrics. Further, it is useful to detect when writing a metric that
the event specified is supported within the event json for a
model. From the metric python code Event(s) are used, with fallback
events provided, if no event is found then an exception is thrown and
that can either indicate a failure or an unsupported model. To avoid
confusion all the metrics and their metricgroups are prefixed with
'lpm_', where LPM is an abbreviation of Linux Perf Metric. While extra
characters aren't ideal, this separates the metrics from other vendor
provided metrics.
* The first 14 patches introduce infrastructure and fixes for the
addition of metrics written in python for Arm64, AMD Zen and Intel
CPUs. The ilist.py and perf python module are fixed to work better
with metrics on hybrid architectures.
* The next 9 patches generate additional metrics for AMD zen. Rapl
and Idle metrics aren't specific to AMD but are placed here for ease
and convenience. Uncore L3 metrics are added along with the majority
of core metrics.
* The next 20 patches add additional metrics for Intel. Rapl and Idle
metrics aren't specific to Intel but are placed here for ease and
convenience. Smi and tsx metrics are added so they can be dropped
from the per model json files. There are four uncore sets of metrics
and eleven core metrics. Add a CheckPmu function to metric to
simplify detecting the presence of hybrid PMUs in events. Metrics
with experimental events are flagged as experimental in their
description.
* The next 2 patches add additional metrics for Arm64, where the
topdown set decomposes yet further. The metrcs primarily use json
events, where the json contains architecture standard events. Not
all events are in the json, such as for a53 where the events are in
sysfs. Workaround this by adding the sysfs events to the metrics but
longer-term such events should be added to the json.
* The final patch validates that all events provided to an Event
object exist in a json file somewhere. This is to avoid mistakes
like unfortunate typos.
This series has benefitted from the input of Leo Yan
<leo.yan@arm.com>, Sandipan Das <sandidas@amd.com>, Thomas Falcon
<thomas.falcon@intel.com> and Perry Taylor <perry.taylor@intel.com>.
v9. Drop (for now) 4 AMD sets of metrics for additional follow up. Add
reviewed-by tags from Sandipan Das (AMD) and tested-by tags from
Thomas Falcon (Intel).
v8. Combine the previous 4 series for clarity. Rebase on top of the
more recent legacy metric and event changes. Make the python more
pep8 and pylint compliant.
Foundations:
v6. Fix issue with '\-' escape not being '\\-' (reported-by Sandipan
Das <sandidas@amd.com>) which didn't alter the generated json.
https://lore.kernel.org/lkml/20250904043208.995243-1-irogers@google.com/
v5. Rebase on top of legacy hardware/cache changes that now generate
events using python:
https://lore.kernel.org/lkml/20250828205930.4007284-1-irogers@google.com/
the v5 series is:
https://lore.kernel.org/lkml/20250829030727.4159703-1-irogers@google.com/
v4. Rebase and small Build/Makefile tweak
https://lore.kernel.org/lkml/20240926173554.404411-1-irogers@google.com/
v3. Some code tidying, make the input directory a command line
argument, but no other functional or output changes.
https://lore.kernel.org/lkml/20240314055051.1960527-1-irogers@google.com/
v2. Fixes two type issues in the python code but no functional or
output changes.
https://lore.kernel.org/lkml/20240302005950.2847058-1-irogers@google.com/
v1. https://lore.kernel.org/lkml/20240302005950.2847058-1-irogers@google.com/
AMD:
v6. Fix issue with '\-' escape not being '\\-' (reported-by Sandipan
Das <sandidas@amd.com>) which didn't alter the generated json.
https://lore.kernel.org/lkml/20250904044047.999031-1-irogers@google.com/
v5. Rebase. Add uop cache hit/miss rates patch. Prefix all metric
names with lpm_ (short for Linux Perf Metric) so that python
generated metrics are clearly namespaced.
https://lore.kernel.org/lkml/20250829033138.4166591-1-irogers@google.com/
v4. Rebase.
https://lore.kernel.org/lkml/20240926174101.406874-1-irogers@google.com/
v3. Some minor code cleanup changes.
https://lore.kernel.org/lkml/20240314055839.1975063-1-irogers@google.com/
v2. Drop the cycles breakdown in favor of having it as a common
metric, suggested by Kan Liang <kan.liang@linux.intel.com>.
https://lore.kernel.org/lkml/20240301184737.2660108-1-irogers@google.com/
v1. https://lore.kernel.org/lkml/20240229001537.4158049-1-irogers@google.com/
Intel:
v6. Fix issue with '\-' escape not being '\\-' (reported-by Sandipan
Das <sandidas@amd.com>) which didn't alter the generated json.
https://lore.kernel.org/lkml/20250904044653.1002362-1-irogers@google.com/
v5. Rebase. Fix description for smi metric (Kan). Prefix all metric
names with lpm_ (short for Linux Perf Metric) so that python
generated metrics are clearly namespaced. Kan requested a
namespace in his review:
https://lore.kernel.org/lkml/43548903-b7c8-47c4-b1da-0258293ecbd4@linux.intel.com/
The v5 series is:
https://lore.kernel.org/lkml/20250829041104.4186320-1-irogers@google.com/
v4. Experimental metric descriptions. Add mesh bandwidth metric. Rebase.
https://lore.kernel.org/lkml/20240926175035.408668-1-irogers@google.com/
v3. Swap tsx and CheckPMU patches that were in the wrong order. Some
minor code cleanup changes. Drop reference to merged fix for
umasks/occ_sel in PCU events and for cstate metrics.
https://lore.kernel.org/lkml/20240314055919.1979781-1-irogers@google.com/
v2. Drop the cycles breakdown in favor of having it as a common
metric, spelling and other improvements suggested by Kan Liang
<kan.liang@linux.intel.com>.
https://lore.kernel.org/lkml/20240301185559.2661241-1-irogers@google.com/
v1. https://lore.kernel.org/lkml/20240229001806.4158429-1-irogers@google.com/
ARM:
v7. Switch a use of cycles to cpu-cycles due to ARM having too many
cycles events.
https://lore.kernel.org/lkml/20250904194139.1540230-1-irogers@google.com/
v6. Fix issue with '\-' escape not being '\\-' (reported-by Sandipan
Das <sandidas@amd.com>) which didn't alter the generated json.
https://lore.kernel.org/lkml/20250904045253.1007052-1-irogers@google.com/
v5. Rebase. Address review comments from Leo Yan
<leo.yan@arm.com>. Prefix all metric names with lpm_ (short for
Linux Perf Metric) so that python generated metrics are clearly
namespaced. Use cpu-cycles rather than cycles legacy event for
cycles metrics to avoid confusion with ARM PMUs. Add patch that
checks events to ensure all possible event names are present in at
least one json file.
https://lore.kernel.org/lkml/20250829053235.21994-1-irogers@google.com/
v4. Tweak to build dependencies and rebase.
https://lore.kernel.org/lkml/20240926175709.410022-1-irogers@google.com/
v3. Some minor code cleanup changes.
https://lore.kernel.org/lkml/20240314055801.1973422-1-irogers@google.com/
v2. The cycles metrics are now made common and shared with AMD and
Intel, suggested by Kan Liang <kan.liang@linux.intel.com>. This
assumes these patches come after the AMD and Intel sets.
https://lore.kernel.org/lkml/20240301184942.2660478-1-irogers@google.com/
v1. https://lore.kernel.org/lkml/20240229001325.4157655-1-irogers@google.com/
Ian Rogers (48):
perf python: Correct copying of metric_leader in an evsel
perf ilist: Be tolerant of reading a metric on the wrong CPU
perf jevents: Allow multiple metricgroups.json files
perf jevents: Update metric constraint support
perf jevents: Add descriptions to metricgroup abstraction
perf jevents: Allow metric groups not to be named
perf jevents: Support parsing negative exponents
perf jevents: Term list fix in event parsing
perf jevents: Add threshold expressions to Metric
perf jevents: Move json encoding to its own functions
perf jevents: Drop duplicate pending metrics
perf jevents: Skip optional metrics in metric group list
perf jevents: Build support for generating metrics from python
perf jevents: Add load event json to verify and allow fallbacks
perf jevents: Add RAPL event metric for AMD zen models
perf jevents: Add idle metric for AMD zen models
perf jevents: Add upc metric for uops per cycle for AMD
perf jevents: Add br metric group for branch statistics on AMD
perf jevents: Add itlb metric group for AMD
perf jevents: Add dtlb metric group for AMD
perf jevents: Add uncore l3 metric group for AMD
perf jevents: Add load store breakdown metrics ldst for AMD
perf jevents: Add context switch metrics for AMD
perf jevents: Add RAPL metrics for all Intel models
perf jevents: Add idle metric for Intel models
perf jevents: Add CheckPmu to see if a PMU is in loaded json events
perf jevents: Add smi metric group for Intel models
perf jevents: Mark metrics with experimental events as experimental
perf jevents: Add tsx metric group for Intel models
perf jevents: Add br metric group for branch statistics on Intel
perf jevents: Add software prefetch (swpf) metric group for Intel
perf jevents: Add ports metric group giving utilization on Intel
perf jevents: Add L2 metrics for Intel
perf jevents: Add load store breakdown metrics ldst for Intel
perf jevents: Add ILP metrics for Intel
perf jevents: Add context switch metrics for Intel
perf jevents: Add FPU metrics for Intel
perf jevents: Add Miss Level Parallelism (MLP) metric for Intel
perf jevents: Add mem_bw metric for Intel
perf jevents: Add local/remote "mem" breakdown metrics for Intel
perf jevents: Add dir breakdown metrics for Intel
perf jevents: Add C-State metrics from the PCU PMU for Intel
perf jevents: Add local/remote miss latency metrics for Intel
perf jevents: Add upi_bw metric for Intel
perf jevents: Add mesh bandwidth saturation metric for Intel
perf jevents: Add collection of topdown like metrics for arm64
perf jevents: Add cycles breakdown metric for arm64/AMD/Intel
perf jevents: Validate that all names given an Event
tools/perf/.gitignore | 5 +
tools/perf/Makefile.perf | 2 +
tools/perf/pmu-events/Build | 51 +-
tools/perf/pmu-events/amd_metrics.py | 491 ++++++++++
tools/perf/pmu-events/arm64_metrics.py | 187 ++++
tools/perf/pmu-events/common_metrics.py | 19 +
tools/perf/pmu-events/intel_metrics.py | 1129 +++++++++++++++++++++++
tools/perf/pmu-events/jevents.py | 7 +-
tools/perf/pmu-events/metric.py | 256 ++++-
tools/perf/pmu-events/metric_test.py | 4 +
tools/perf/python/ilist.py | 8 +-
tools/perf/util/evsel.c | 1 +
tools/perf/util/python.c | 82 +-
13 files changed, 2188 insertions(+), 54 deletions(-)
create mode 100755 tools/perf/pmu-events/amd_metrics.py
create mode 100755 tools/perf/pmu-events/arm64_metrics.py
create mode 100644 tools/perf/pmu-events/common_metrics.py
create mode 100755 tools/perf/pmu-events/intel_metrics.py
--
2.52.0.158.g65b55ccf14-goog
next reply other threads:[~2025-12-02 17:50 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-02 17:49 Ian Rogers [this message]
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-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=20251202175043.623597-1-irogers@google.com \
--to=irogers@google.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=bgray@linux.ibm.com \
--cc=caleb.biggers@intel.com \
--cc=edward.baker@intel.com \
--cc=james.clark@linaro.org \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--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).