* [PATCH] perf test: Fix perf stat --bpf-counters on hybrid machines
@ 2026-03-17 7:00 Namhyung Kim
2026-03-17 15:57 ` Ian Rogers
0 siblings, 1 reply; 2+ messages in thread
From: Namhyung Kim @ 2026-03-17 7:00 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Ian Rogers, James Clark
Cc: Jiri Olsa, Adrian Hunter, Peter Zijlstra, Ingo Molnar, LKML,
linux-perf-users
The test constantly fails on my Intel hybrid machine. The issue was it
has two events in the output even if I only gave it one event.
$ perf stat -e instructions -- perf test -w sqrtloop
Performance counter stats for 'perf test -w sqrtloop':
910,856,421 cpu_atom/instructions/ (28.05%)
14,852,865,997 cpu_core/instructions/ (96.79%)
1.014313341 seconds time elapsed
1.004114000 seconds user
0.008174000 seconds sys
Let's modify the awk script to add the values for each line and print
the total. That way it should work on any platforms.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/tests/shell/stat_bpf_counters.sh | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/tools/perf/tests/shell/stat_bpf_counters.sh b/tools/perf/tests/shell/stat_bpf_counters.sh
index f43e28a136d3c9bc..e04808ed871e3f08 100755
--- a/tools/perf/tests/shell/stat_bpf_counters.sh
+++ b/tools/perf/tests/shell/stat_bpf_counters.sh
@@ -41,8 +41,10 @@ check_counts()
test_bpf_counters()
{
printf "Testing --bpf-counters "
- base_instructions=$(perf stat --no-big-num -e instructions -- $workload 2>&1 | awk '/instructions/ {print $1}')
- bpf_instructions=$(perf stat --no-big-num --bpf-counters -e instructions -- $workload 2>&1 | awk '/instructions/ {print $1}')
+ base_instructions=$(perf stat --no-big-num -e instructions -- $workload 2>&1 | \
+ awk -v i=0 '/instructions/ {i += $1} END {print i}')
+ bpf_instructions=$(perf stat --no-big-num --bpf-counters -e instructions -- $workload 2>&1 | \
+ awk -v i=0 '/instructions/ {i += $1} END {print i}')
check_counts $base_instructions $bpf_instructions
compare_number $base_instructions $bpf_instructions
echo "[Success]"
@@ -52,8 +54,8 @@ test_bpf_modifier()
{
printf "Testing bpf event modifier "
stat_output=$(perf stat --no-big-num -e instructions/name=base_instructions/,instructions/name=bpf_instructions/b -- $workload 2>&1)
- base_instructions=$(echo "$stat_output"| awk '/base_instructions/ {print $1}')
- bpf_instructions=$(echo "$stat_output"| awk '/bpf_instructions/ {print $1}')
+ base_instructions=$(echo "$stat_output"| awk -v i=0 '/base_instructions/ {i += $1} END {print i}')
+ bpf_instructions=$(echo "$stat_output"| awk -v i=0 '/bpf_instructions/ {i += $1} END {print i}')
check_counts $base_instructions $bpf_instructions
compare_number $base_instructions $bpf_instructions
echo "[Success]"
--
2.53.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] perf test: Fix perf stat --bpf-counters on hybrid machines
2026-03-17 7:00 [PATCH] perf test: Fix perf stat --bpf-counters on hybrid machines Namhyung Kim
@ 2026-03-17 15:57 ` Ian Rogers
0 siblings, 0 replies; 2+ messages in thread
From: Ian Rogers @ 2026-03-17 15:57 UTC (permalink / raw)
To: Namhyung Kim
Cc: Arnaldo Carvalho de Melo, James Clark, Jiri Olsa, Adrian Hunter,
Peter Zijlstra, Ingo Molnar, LKML, linux-perf-users
On Tue, Mar 17, 2026 at 12:00 AM Namhyung Kim <namhyung@kernel.org> wrote:
>
> The test constantly fails on my Intel hybrid machine. The issue was it
> has two events in the output even if I only gave it one event.
>
> $ perf stat -e instructions -- perf test -w sqrtloop
>
> Performance counter stats for 'perf test -w sqrtloop':
>
> 910,856,421 cpu_atom/instructions/ (28.05%)
> 14,852,865,997 cpu_core/instructions/ (96.79%)
>
> 1.014313341 seconds time elapsed
>
> 1.004114000 seconds user
> 0.008174000 seconds sys
>
> Let's modify the awk script to add the values for each line and print
> the total. That way it should work on any platforms.
Thanks Namhyung! Sashiko noted a regression in the "not
counted/supported" logic caused by this change:
https://sashiko.dev/#/patchset/20260317070032.41934-1-namhyung%40kernel.org
Does this modification to the awk script prevent the detection of unsupported
or uncounted events?
When perf stat outputs strings like "<not counted>" or "<not supported>",
the first field is "<not". In awk arithmetic, adding a non-numeric string
evaluates to 0. The script will output 0 instead of the string.
The check_counts() function explicitly checks for these uncounted events:
check_counts()
{
if [ "$1" = "<not" ]; then
printf "[Skipped]\n"
Since awk now returns 0, it seems the test will bypass the skip logic,
proceed to compare the numbers (0 and 0), and falsely report success. Can the
awk script be adjusted to preserve non-numeric strings?
Thanks,
Ian
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> tools/perf/tests/shell/stat_bpf_counters.sh | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/tests/shell/stat_bpf_counters.sh b/tools/perf/tests/shell/stat_bpf_counters.sh
> index f43e28a136d3c9bc..e04808ed871e3f08 100755
> --- a/tools/perf/tests/shell/stat_bpf_counters.sh
> +++ b/tools/perf/tests/shell/stat_bpf_counters.sh
> @@ -41,8 +41,10 @@ check_counts()
> test_bpf_counters()
> {
> printf "Testing --bpf-counters "
> - base_instructions=$(perf stat --no-big-num -e instructions -- $workload 2>&1 | awk '/instructions/ {print $1}')
> - bpf_instructions=$(perf stat --no-big-num --bpf-counters -e instructions -- $workload 2>&1 | awk '/instructions/ {print $1}')
> + base_instructions=$(perf stat --no-big-num -e instructions -- $workload 2>&1 | \
> + awk -v i=0 '/instructions/ {i += $1} END {print i}')
> + bpf_instructions=$(perf stat --no-big-num --bpf-counters -e instructions -- $workload 2>&1 | \
> + awk -v i=0 '/instructions/ {i += $1} END {print i}')
> check_counts $base_instructions $bpf_instructions
> compare_number $base_instructions $bpf_instructions
> echo "[Success]"
> @@ -52,8 +54,8 @@ test_bpf_modifier()
> {
> printf "Testing bpf event modifier "
> stat_output=$(perf stat --no-big-num -e instructions/name=base_instructions/,instructions/name=bpf_instructions/b -- $workload 2>&1)
> - base_instructions=$(echo "$stat_output"| awk '/base_instructions/ {print $1}')
> - bpf_instructions=$(echo "$stat_output"| awk '/bpf_instructions/ {print $1}')
> + base_instructions=$(echo "$stat_output"| awk -v i=0 '/base_instructions/ {i += $1} END {print i}')
> + bpf_instructions=$(echo "$stat_output"| awk -v i=0 '/bpf_instructions/ {i += $1} END {print i}')
> check_counts $base_instructions $bpf_instructions
> compare_number $base_instructions $bpf_instructions
> echo "[Success]"
> --
> 2.53.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-03-17 15:58 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-17 7:00 [PATCH] perf test: Fix perf stat --bpf-counters on hybrid machines Namhyung Kim
2026-03-17 15:57 ` Ian Rogers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox