As of now, bpf counters (bperf) don't support event groups. But the
default perf stat includes topdown metrics if supported (on recent Intel
machines) which require groups. That makes perf stat exiting.
$ sudo perf stat --bpf-counter true
bpf managed perf events do not yet support groups.
Actually the test explicitly uses cycles event only, but it missed to
pass the option when it checks the availability of the command.
Fixes: 2c0cb9f560
("perf test: Add a shell test for 'perf stat --bpf-counters' new option")
Reviewed-by: Song Liu <song@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bpf@vger.kernel.org
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230825164152.165610-2-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
45 lines
1.3 KiB
Bash
Executable file
45 lines
1.3 KiB
Bash
Executable file
#!/bin/sh
|
|
# perf stat --bpf-counters test
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
set -e
|
|
|
|
# check whether $2 is within +/- 10% of $1
|
|
compare_number()
|
|
{
|
|
first_num=$1
|
|
second_num=$2
|
|
|
|
# upper bound is first_num * 110%
|
|
upper=$(expr $first_num + $first_num / 10 )
|
|
# lower bound is first_num * 90%
|
|
lower=$(expr $first_num - $first_num / 10 )
|
|
|
|
if [ $second_num -gt $upper ] || [ $second_num -lt $lower ]; then
|
|
echo "The difference between $first_num and $second_num are greater than 10%."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# skip if --bpf-counters is not supported
|
|
if ! perf stat -e cycles --bpf-counters true > /dev/null 2>&1; then
|
|
if [ "$1" = "-v" ]; then
|
|
echo "Skipping: --bpf-counters not supported"
|
|
perf --no-pager stat -e cycles --bpf-counters true || true
|
|
fi
|
|
exit 2
|
|
fi
|
|
|
|
base_cycles=$(perf stat --no-big-num -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}')
|
|
if [ "$base_cycles" = "<not" ]; then
|
|
echo "Skipping: cycles event not counted"
|
|
exit 2
|
|
fi
|
|
bpf_cycles=$(perf stat --no-big-num --bpf-counters -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}')
|
|
if [ "$bpf_cycles" = "<not" ]; then
|
|
echo "Failed: cycles not counted with --bpf-counters"
|
|
exit 1
|
|
fi
|
|
|
|
compare_number $base_cycles $bpf_cycles
|
|
exit 0
|