[RFC/PATCHSET 00/19] perf stat: Cleanup counter aggregation (v1)

From: Namhyung Kim
Date: Mon Oct 10 2022 - 01:36:11 EST


Hello,

Current perf stat code is somewhat hard to follow since it handles
many combinations of PMUs/events for given display and aggregation
options. This is my attempt to clean it up a little. ;-)

My first concern is that aggregation and display routines are intermixed
and processed differently depends on the aggregation mode. I'd like to
separate them apart and make the logic clearer.

To do that, I added struct perf_stat_aggr to save the aggregated counter
values and other info. It'll be allocated and processed according to
the aggr_mode and display logic will use it.

The code is available at 'perf/stat-aggr-v1' branch in

git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git

Thanks,
Namhyung


Namhyung Kim (19):
perf tools: Save evsel->pmu in parse_events()
perf tools: Use pmu info in evsel__is_hybrid()
perf stat: Use evsel__is_hybrid() more
perf stat: Add aggr id for global mode
perf stat: Add cpu aggr id for no aggregation mode
perf stat: Add 'needs_sort' argument to cpu_aggr_map__new()
perf stat: Add struct perf_stat_aggr to perf_stat_evsel
perf stat: Allocate evsel->stats->aggr properly
perf stat: Aggregate events using evsel->stats->aggr
perf stat: Aggregate per-thread stats using evsel->stats->aggr
perf stat: Allocate aggr counts for recorded data
perf stat: Reset aggr counts for each interval
perf stat: Split process_counters()
perf stat: Add perf_stat_merge_counters()
perf stat: Add perf_stat_process_percore()
perf stat: Add perf_stat_process_shadow_stats()
perf stat: Display event stats using aggr counts
perf stat: Display percore events properly
perf stat: Remove unused perf_counts.aggr field

tools/perf/builtin-script.c | 4 +-
tools/perf/builtin-stat.c | 177 +++++--
tools/perf/tests/parse-metric.c | 2 +-
tools/perf/tests/pmu-events.c | 2 +-
tools/perf/util/counts.c | 1 -
tools/perf/util/counts.h | 1 -
tools/perf/util/cpumap.c | 16 +-
tools/perf/util/cpumap.h | 8 +-
tools/perf/util/evsel.c | 13 +-
tools/perf/util/parse-events.c | 1 +
tools/perf/util/pmu.c | 4 +
.../scripting-engines/trace-event-python.c | 6 -
tools/perf/util/stat-display.c | 472 +++---------------
tools/perf/util/stat.c | 383 +++++++++++---
tools/perf/util/stat.h | 29 +-
15 files changed, 590 insertions(+), 529 deletions(-)


base-commit: d79310700590b8b40d8c867012d6c899ea6fd505
--
2.38.0.rc1.362.ged0d419d3c-goog