From: Ian Rogers <irogers@google.com>
To: Thomas Falcon <thomas.falcon@intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
"Liang, Kan" <kan.liang@linux.intel.com>,
Ravi Bangoria <ravi.bangoria@amd.com>,
James Clark <james.clark@linaro.org>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Weilin Wang <weilin.wang@intel.com>,
Andi Kleen <ak@linux.intel.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: [PATCH v3 00/15] Fixes for Intel TMA, particularly for hybrid
Date: Fri, 18 Jul 2025 20:05:02 -0700 [thread overview]
Message-ID: <20250719030517.1990983-1-irogers@google.com> (raw)
On hybrid systems some PMUs apply to all core types, particularly for
metrics the msr PMU and the tsc event. The metrics often only want the
values of the counter for their specific core type. These patches
allow the cpu term in an event to give a PMU name to take the cpumask
from. For example:
$ perf stat -e msr/tsc,cpu=cpu_atom/ ...
will aggregate the msr/tsc/ value but only for atom cores. In doing
this problems were identified in how cpumasks are handled by parsing
and event setup when cpumasks are specified along with a task to
profile. The event parsing, cpumask evlist propagation code and perf
stat code are updated accordingly.
The final result of the patch series is to be able to run:
```
$ perf stat --no-scale -e 'msr/tsc/,msr/tsc,cpu=cpu_core/,msr/tsc,cpu=cpu_atom/' perf test -F 10
10.1: Basic parsing test : Ok
10.2: Parsing without PMU name : Ok
10.3: Parsing with PMU name : Ok
Performance counter stats for 'perf test -F 10':
63,704,975 msr/tsc/
47,060,704 msr/tsc,cpu=cpu_core/ (4.62%)
16,640,591 msr/tsc,cpu=cpu_atom/ (2.18%)
```
This has (further) identified a kernel bug for task events around the
enabled time being too large leading to invalid scaling (hence the
--no-scale in the command line above).
Additionally the series corrects topdown event processing and starts
injecting slots events as preparation for TMA 5.1 whose updates will
be sent as a follow-up patch series.
v3: Fix CPU map computation for uncore/requires_cpu, don't simplify
for the "any"(-1) CPU case. Combine with topdown slots/fix and
injection previously:
https://lore.kernel.org/lkml/20250718132750.1546457-1-irogers@google.com/
This has a grouping fix added for the injected slots event. Add
new no grouping constraint for threshold + NMI for issue with
alderlake metrics failing to schedule when thresholds are enabled
along with the NMI watchdog.
v2: Add additional documentation of the cpu term to `perf list`
(Namhyung), extend the term to also allow CPU ranges. Add Thomas
Falcon's reviewed-by. Still open for discussion whether the term
cpu should have >1 variant for PMUs, etc. or whether the single
term is okay. We could refactor later and add a term, but that
would break existing users, but they are most likely to be metrics
so probably not a huge issue.
Ian Rogers (15):
perf parse-events: Warn if a cpu term is unsupported by a CPU
perf stat: Avoid buffer overflow to the aggregation map
perf stat: Don't size aggregation ids from user_requested_cpus
perf parse-events: Allow the cpu term to be a PMU or CPU range
perf tool_pmu: Allow num_cpus(_online) to be specific to a cpumask
libperf evsel: Rename own_cpus to pmu_cpus
libperf evsel: Factor perf_evsel__exit out of perf_evsel__delete
perf evsel: Use libperf perf_evsel__exit
perf pmus: Factor perf_pmus__find_by_attr out of evsel__find_pmu
perf parse-events: Minor __add_event refactoring
perf evsel: Add evsel__open_per_cpu_and_thread
perf parse-events: Support user CPUs mixed with threads/processes
perf topdown: Use attribute to see an event is a topdown metic or
slots
perf parse-events: Fix missing slots for Intel topdown metric events
perf metricgroups: Add NO_THRESHOLD_AND_NMI constraint
tools/lib/perf/evlist.c | 119 +++++++++++++++-------
tools/lib/perf/evsel.c | 9 +-
tools/lib/perf/include/internal/evsel.h | 3 +-
tools/perf/Documentation/perf-list.txt | 25 +++--
tools/perf/arch/x86/include/arch-tests.h | 4 +
tools/perf/arch/x86/tests/Build | 1 +
tools/perf/arch/x86/tests/arch-tests.c | 1 +
tools/perf/arch/x86/tests/topdown.c | 76 ++++++++++++++
tools/perf/arch/x86/util/evlist.c | 24 +++++
tools/perf/arch/x86/util/evsel.c | 46 +++------
tools/perf/arch/x86/util/topdown.c | 59 +++++++----
tools/perf/arch/x86/util/topdown.h | 6 ++
tools/perf/builtin-stat.c | 9 +-
tools/perf/pmu-events/jevents.py | 1 +
tools/perf/pmu-events/pmu-events.h | 14 ++-
tools/perf/tests/event_update.c | 4 +-
tools/perf/tests/parse-events.c | 24 ++---
tools/perf/util/evlist.c | 15 +--
tools/perf/util/evlist.h | 1 +
tools/perf/util/evsel.c | 55 ++++++++--
tools/perf/util/evsel.h | 5 +
tools/perf/util/expr.c | 2 +-
tools/perf/util/header.c | 4 +-
tools/perf/util/metricgroup.c | 16 ++-
tools/perf/util/parse-events.c | 122 ++++++++++++++++++-----
tools/perf/util/pmus.c | 29 +++---
tools/perf/util/pmus.h | 2 +
tools/perf/util/stat.c | 6 +-
tools/perf/util/synthetic-events.c | 4 +-
tools/perf/util/tool_pmu.c | 56 +++++++++--
tools/perf/util/tool_pmu.h | 2 +-
31 files changed, 532 insertions(+), 212 deletions(-)
create mode 100644 tools/perf/arch/x86/tests/topdown.c
--
2.50.0.727.gbf7dc18ff4-goog
next reply other threads:[~2025-07-19 3:05 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-19 3:05 Ian Rogers [this message]
2025-07-19 3:05 ` [PATCH v3 01/15] perf parse-events: Warn if a cpu term is unsupported by a CPU Ian Rogers
2025-07-19 3:05 ` [PATCH v3 02/15] perf stat: Avoid buffer overflow to the aggregation map Ian Rogers
2025-07-19 3:05 ` [PATCH v3 03/15] perf stat: Don't size aggregation ids from user_requested_cpus Ian Rogers
2025-07-19 3:05 ` [PATCH v3 04/15] perf parse-events: Allow the cpu term to be a PMU or CPU range Ian Rogers
2025-07-19 3:05 ` [PATCH v3 05/15] perf tool_pmu: Allow num_cpus(_online) to be specific to a cpumask Ian Rogers
2025-07-19 3:05 ` [PATCH v3 06/15] libperf evsel: Rename own_cpus to pmu_cpus Ian Rogers
2025-07-19 3:05 ` [PATCH v3 07/15] libperf evsel: Factor perf_evsel__exit out of perf_evsel__delete Ian Rogers
2025-07-19 3:05 ` [PATCH v3 08/15] perf evsel: Use libperf perf_evsel__exit Ian Rogers
2025-07-19 3:05 ` [PATCH v3 09/15] perf pmus: Factor perf_pmus__find_by_attr out of evsel__find_pmu Ian Rogers
2025-07-19 3:05 ` [PATCH v3 10/15] perf parse-events: Minor __add_event refactoring Ian Rogers
2025-07-19 3:05 ` [PATCH v3 11/15] perf evsel: Add evsel__open_per_cpu_and_thread Ian Rogers
2025-07-19 3:05 ` [PATCH v3 12/15] perf parse-events: Support user CPUs mixed with threads/processes Ian Rogers
2025-07-24 15:12 ` Ian Rogers
2025-07-19 3:05 ` [PATCH v3 13/15] perf topdown: Use attribute to see an event is a topdown metic or slots Ian Rogers
2025-07-19 3:05 ` [PATCH v3 14/15] perf parse-events: Fix missing slots for Intel topdown metric events Ian Rogers
2025-07-19 3:05 ` [PATCH v3 15/15] perf metricgroups: Add NO_THRESHOLD_AND_NMI constraint Ian Rogers
2025-07-25 18:48 ` [PATCH v3 00/15] Fixes for Intel TMA, particularly for hybrid 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=20250719030517.1990983-1-irogers@google.com \
--to=irogers@google.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=james.clark@linaro.org \
--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=ravi.bangoria@amd.com \
--cc=thomas.falcon@intel.com \
--cc=weilin.wang@intel.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
all inboxes | Powered by JetHome®