Re: [PATCHSET 00/19] perf stat: Cleanup counter aggregation (v2)

From: Namhyung Kim
Date: Fri Oct 14 2022 - 14:10:32 EST


Hi Jiri and Michael,

On Thu, Oct 13, 2022 at 11:56 PM Jiri Olsa <olsajiri@xxxxxxxxx> wrote:
>
> On Thu, Oct 13, 2022 at 11:15:31PM -0700, Namhyung Kim wrote:
> > 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. ;-)
> >
> > changes in v2)
> > * fix a segfault in perf stat report for per-process record (Jiri)
> > * fix metric only display (Jiri)
> > * add evsel__reset_aggr_stat (ian)
> > * add more comments (Ian)
> > * add Acked-by from Ian
> >
> > 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.
> >
> > I've tested the following combination.
> >
> > $ cat test-matrix.sh
> > #!/bin/sh
> >
> > set -e
> >
> > yes > /dev/null &
> > TARGET=$!
> >
> > ./perf stat true
> > ./perf stat -a true
> > ./perf stat -C0 true
> > ./perf stat -p $TARGET true
> > ./perf stat -t $TARGET true
> >
> > ./perf stat -a -A true
> > ./perf stat -a --per-node true
> > ./perf stat -a --per-socket true
> > ./perf stat -a --per-die true
> > ./perf stat -a --per-core true
> > ./perf stat -a --per-thread true
> >
> > ./perf stat -a -I 500 sleep 1
> > ./perf stat -a -I 500 --summary sleep 1
> > ./perf stat -a -I 500 --per-socket sleep 1
> > ./perf stat -a -I 500 --summary --per-socket sleep 1
> >
> > ./perf stat -a --metric-only true
> > ./perf stat -a --metric-only --per-socket true
> > ./perf stat -a --metric-only -I 500 sleep 1
> > ./perf stat -a --metric-only -I 500 --per-socket sleep 1
> >
> > ./perf stat record true && ./perf stat report
> > ./perf stat record -p $TARGET true && ./perf stat report
> > ./perf stat record -a true && ./perf stat report
> > ./perf stat record -a --per-core true && ./perf stat report
> > ./perf stat record -a --per-core --metric-only true && ./perf stat report
> > ./perf stat record -a -I 500 sleep 1 && ./perf stat report
> > ./perf stat record -a -I 500 --per-core sleep 1 && ./perf stat report
> > ./perf stat record -a -I 500 --per-core --metric-only sleep 1 && ./perf stat report
> >
> > ./perf stat -a -A -e cpu/event=cpu-cycles,percore/ true
> > ./perf stat -a -A -e cpu/event=cpu-cycles,percore/ --percore-show-thread true
> >
> > kill $TARGET
> >
> > The code is available at 'perf/stat-aggr-v2' branch in
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
>
> Michael,
> ay chance you could run your test suite on top of this change?

I've noticed there's an issue with cgroups. Will send a fix soon.

Thanks,
Namhyung