From: "Falcon, Thomas" <thomas.falcon@intel.com>
To: "namhyung@kernel.org" <namhyung@kernel.org>,
"Rogers, Ian" <irogers@google.com>
Cc: "james.clark@linaro.org" <james.clark@linaro.org>,
"mingo@kernel.org" <mingo@kernel.org>,
"peterz@infradead.org" <peterz@infradead.org>,
"acme@kernel.org" <acme@kernel.org>,
"linux-perf-users@vger.kernel.org"
<linux-perf-users@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Hunter, Adrian" <adrian.hunter@intel.com>,
"jolsa@kernel.org" <jolsa@kernel.org>
Subject: Re: [PATCH v2] perf test: Fix perf stat --bpf-counters on hybrid machines
Date: Fri, 3 Apr 2026 19:20:48 +0000 [thread overview]
Message-ID: <76987cb602dfb8959e2d2a3c31b59770cf9ac84f.camel@intel.com> (raw)
In-Reply-To: <20260325171653.1091337-1-irogers@google.com>
On Wed, 2026-03-25 at 10:16 -0700, Ian Rogers wrote:
> Events on hardware PMUs may open on >1 hardware PMU on hybrid
> machines. Unfortunately multiplexing introduces a scaling issue as
> reported in:
> https://lore.kernel.org/lkml/20250716223924.825772-1-irogers@google.com/
>
> Switch to using task-clock which as a software event runs on all CPUs
> and has a single PMU.
>
> For when hybrid event scaling is fixed, incorporate support for
> combining hybrid counts as posted by Namhyung Kim in:
> https://lore.kernel.org/lkml/20260319064513.9269-1-namhyung@kernel.org/
>
> Signed-off-by: Ian Rogers <irogers@google.com>
> Acked-by: Namhyung Kim <namhyung@kernel.org>
$ sudo ./perf test "perf stat --bpf-counters test" -vvv
Before:
152: perf stat --bpf-counters test:
--- start ---
test child forked, pid 444406
Testing --bpf-counters The difference between 400418163 and 11886805947
are greater than 20%.
---- end(-1) ----
152: perf stat --bpf-counters test :
FAILED!
After:
152: perf stat --bpf-counters test:
--- start ---
test child forked, pid 466896
Testing --bpf-counters [Success]
Testing bpf event modifier [Success]
---- end(0) ----
152: perf stat --bpf-counters test :
Ok
Tested-by: Thomas Falcon <thomas.falcon@intel.com>
Thanks,
Tom
> ---
> v1:
> https://lore.kernel.org/lkml/20260323202409.194123-1-irogers@google.com/
> ---
> tools/perf/tests/shell/stat_bpf_counters.sh | 55 ++++++++++++++-----
> --
> 1 file changed, 38 insertions(+), 17 deletions(-)
>
> diff --git a/tools/perf/tests/shell/stat_bpf_counters.sh
> b/tools/perf/tests/shell/stat_bpf_counters.sh
> index f43e28a136d3..f8c24ccc7830 100755
> --- a/tools/perf/tests/shell/stat_bpf_counters.sh
> +++ b/tools/perf/tests/shell/stat_bpf_counters.sh
> @@ -5,6 +5,24 @@
> set -e
>
> workload="perf test -w sqrtloop"
> +event=task-clock
> +
> +extract_count()
> +{
> + local target_event="$1"
> +
> + awk -v target="$target_event" -v i=0 -v c=0 '
> + $0 ~ target {
> + i++;
> + c += $1
> + }
> + END {
> + if (i > 0)
> + printf "%.0f\n", c;
> + else
> + print "<not counted>"
> + }'
> +}
>
> # check whether $2 is within +/- 20% of $1
> compare_number()
> @@ -25,15 +43,15 @@ compare_number()
>
> check_counts()
> {
> - base_instructions=$1
> - bpf_instructions=$2
> + base_count=$1
> + bpf_count=$2
>
> - if [ "$base_instructions" = "<not" ]; then
> - echo "Skipping: instructions event not counted"
> + if [ "$base_count" = "<not counted>" ]; then
> + echo "Skipping: $event event not counted"
> exit 2
> fi
> - if [ "$bpf_instructions" = "<not" ]; then
> - echo "Failed: instructions not counted with --bpf-
> counters"
> + if [ "$bpf_count" = "<not counted>" ]; then
> + echo "Failed: $event not counted with --bpf-
> counters"
> exit 1
> fi
> }
> @@ -41,29 +59,32 @@ 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}')
> - check_counts $base_instructions $bpf_instructions
> - compare_number $base_instructions $bpf_instructions
> + base_count=$(perf stat --no-big-num -e "$event" -- $workload
> 2>&1 \
> + | extract_count "$event")
> + bpf_count=$(perf stat --no-big-num --bpf-counters -e
> "$event" -- $workload 2>&1 \
> + | extract_count "$event")
> + check_counts "$base_count" "$bpf_count"
> + compare_number "$base_count" "$bpf_count"
> echo "[Success]"
> }
>
> test_bpf_modifier()
> {
> printf "Testing bpf event modifier "
> - stat_output=$(perf stat --no-big-num -e
> instructions/name=base_instructions/,instructions/name=bpf_instructio
> ns/b -- $workload 2>&1)
> - base_instructions=$(echo "$stat_output"| awk
> '/base_instructions/ {print $1}')
> - bpf_instructions=$(echo "$stat_output"| awk
> '/bpf_instructions/ {print $1}')
> - check_counts $base_instructions $bpf_instructions
> - compare_number $base_instructions $bpf_instructions
> + stat_output=$(perf stat --no-big-num \
> + -e "$event/name=base_$event/,$event/name=bpf_$event/b" --
> $workload 2>&1)
> + base_count=$(echo "$stat_output" | extract_count
> "base_$event")
> + bpf_count=$(echo "$stat_output"| extract_count
> "bpf_$event")
> + check_counts "$base_count" "$bpf_count"
> + compare_number "$base_count" "$bpf_count"
> echo "[Success]"
> }
>
> # skip if --bpf-counters is not supported
> -if ! perf stat -e instructions --bpf-counters true > /dev/null 2>&1;
> then
> +if ! perf stat -e "$event" --bpf-counters true > /dev/null 2>&1;
> then
> if [ "$1" = "-v" ]; then
> echo "Skipping: --bpf-counters not supported"
> - perf --no-pager stat -e instructions --bpf-counters
> true || true
> + perf --no-pager stat -e "$event" --bpf-counters true
> || true
> fi
> exit 2
> fi
next prev parent reply other threads:[~2026-04-03 19:20 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-19 6:45 [PATCH v3] perf test: Fix perf stat --bpf-counters on hybrid machines Namhyung Kim
2026-03-22 22:05 ` Arnaldo Carvalho de Melo
2026-03-23 20:15 ` Ian Rogers
2026-03-23 20:24 ` [RFC PATCH v1] " Ian Rogers
2026-03-23 20:26 ` Ian Rogers
2026-03-25 7:04 ` Namhyung Kim
2026-03-25 17:16 ` [PATCH v2] " Ian Rogers
2026-04-03 19:20 ` Falcon, Thomas [this message]
2026-04-01 21:52 ` [PATCH v3] " Namhyung Kim
-- strict thread matches above, loose matches on Subject: below --
2026-03-18 7:15 [PATCH v2] " Namhyung Kim
2026-03-18 16:47 ` Ian Rogers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=76987cb602dfb8959e2d2a3c31b59770cf9ac84f.camel@intel.com \
--to=thomas.falcon@intel.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox