[PATCH v4 00/12] jevents/pmu-events improvements
Ian Rogers
irogers at google.com
Thu Jan 26 12:18:42 AEDT 2023
Add an optimization to jevents using the metric code, rewrite metrics
in terms of each other in order to minimize size and improve
readability. For example, on Power8
other_stall_cpi is rewritten from:
"PM_CMPLU_STALL / PM_RUN_INST_CMPL - PM_CMPLU_STALL_BRU_CRU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_FXU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_VSU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_LSU / PM_RUN_INST_CMPL - PM_CMPLU_STALL_NTCG_FLUSH / PM_RUN_INST_CMPL - PM_CMPLU_STALL_NO_NTF / PM_RUN_INST_CMPL"
to:
"stall_cpi - bru_cru_stall_cpi - fxu_stall_cpi - vsu_stall_cpi - lsu_stall_cpi - ntcg_flush_cpi - no_ntf_stall_cpi"
Which more closely matches the definition on Power9.
A limitation of the substitutions are that they depend on strict
equality and the shape of the tree. This means that for "a + b + c"
then a substitution of "a + b" will succeed while "b + c" will fail
(the LHS for "+ c" is "a + b" not just "b").
Separate out the events and metrics in the pmu-events tables saving
14.8% in the table size while making it that metrics no longer need to
iterate over all events and vice versa. These changes remove evsel's
direct metric support as the pmu_event no longer has a metric to
populate it. This is a minor issue as the code wasn't working
properly, metrics for this are rare and can still be properly ran
using '-M'.
Add an ability to just build certain models into the jevents generated
pmu-metrics.c code. This functionality is appropriate for operating
systems like ChromeOS, that aim to minimize binary size and know all
the target CPU models.
v4. Better support the implementor/model style --model argument for
jevents.py. Add #slots test fix. On some patches add reviewed-by
John Garry <john.g.garry at oracle.com> and Kajol
Jain<kjain at linux.ibm.com>.
v3. Rebase an incorporate review comments from John Garry
<john.g.garry at oracle.com>, in particular breaking apart patch 4
into 3 patches. The no jevents breakage and then later fix is
avoided in this series too.
v2. Rebase. Modify the code that skips rewriting a metric with the
same name with itself, to make the name check case insensitive.
Ian Rogers (12):
perf jevents metric: Correct Function equality
perf jevents metric: Add ability to rewrite metrics in terms of others
perf jevents: Rewrite metrics in the same file with each other
perf pmu-events: Add separate metric from pmu_event
perf pmu-events: Separate the metrics from events for no jevents
perf pmu-events: Remove now unused event and metric variables
perf stat: Remove evsel metric_name/expr
perf jevents: Combine table prefix and suffix writing
perf pmu-events: Introduce pmu_metrics_table
perf jevents: Generate metrics and events as separate tables
perf jevents: Add model list option
perf pmu-events: Fix testing with JEVENTS_ARCH=all
tools/perf/arch/arm64/util/pmu.c | 11 +-
tools/perf/arch/powerpc/util/header.c | 4 +-
tools/perf/builtin-list.c | 20 +-
tools/perf/builtin-stat.c | 1 -
tools/perf/pmu-events/Build | 3 +-
tools/perf/pmu-events/empty-pmu-events.c | 108 ++++++-
tools/perf/pmu-events/jevents.py | 357 +++++++++++++++++++----
tools/perf/pmu-events/metric.py | 79 ++++-
tools/perf/pmu-events/metric_test.py | 10 +
tools/perf/pmu-events/pmu-events.h | 26 +-
tools/perf/tests/expand-cgroup.c | 4 +-
tools/perf/tests/parse-metric.c | 4 +-
tools/perf/tests/pmu-events.c | 69 ++---
tools/perf/util/cgroup.c | 1 -
tools/perf/util/evsel.c | 2 -
tools/perf/util/evsel.h | 2 -
tools/perf/util/expr.h | 1 +
tools/perf/util/expr.l | 8 +-
tools/perf/util/metricgroup.c | 207 +++++++------
tools/perf/util/metricgroup.h | 4 +-
tools/perf/util/parse-events.c | 2 -
tools/perf/util/pmu.c | 44 +--
tools/perf/util/pmu.h | 10 +-
tools/perf/util/print-events.c | 32 +-
tools/perf/util/print-events.h | 3 +-
tools/perf/util/python.c | 7 -
tools/perf/util/stat-shadow.c | 112 -------
tools/perf/util/stat.h | 1 -
28 files changed, 666 insertions(+), 466 deletions(-)
--
2.39.1.456.gfc5497dd1b-goog
More information about the Linuxppc-dev
mailing list