Re: [Patch v3] perf tests: Add auto counter reload (ACR) sampling test
From: Falcon, Thomas
Date: Thu May 21 2026 - 14:11:28 EST
On Tue, 2026-04-21 at 12:55 +0800, Dapeng Mi wrote:
> Add auto counter reload sampling test to verify that the intended
> event
> records can be captured and the self-reloaded events won't generate
> any
> records.
>
> Additionally, enhance ratio_to_prev test to verify ACR sampling as
> well
> if ACR is supported.
>
> Signed-off-by: Dapeng Mi <dapeng1.mi@xxxxxxxxxxxxxxx>
> ---
>
> V3: Move ratio-to-prev ACR sampling test into ratio_to_prev test.
> V2:
> https://lore.kernel.org/all/20260420025501.2133495-1-dapeng1.mi@xxxxxxxxxxxxxxx/
> v1:
> https://lore.kernel.org/all/20260413010920.546501-1-dapeng1.mi@xxxxxxxxxxxxxxx/
>
> tools/perf/tests/shell/record.sh | 92
> +++++++++++++++++++++++++++++++-
> 1 file changed, 91 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/tests/shell/record.sh
> b/tools/perf/tests/shell/record.sh
> index 7cb81cf3444a..091d8b0a998b 100755
> --- a/tools/perf/tests/shell/record.sh
> +++ b/tools/perf/tests/shell/record.sh
> @@ -402,7 +402,52 @@ test_callgraph() {
> echo "Callgraph test [Success]"
> }
>
> +test_acr_sampling() {
> +
> events="{instructions/period=40000,acr_mask=0x2/u,cycles/period=20000
> ,acr_mask=0x3/u}"
> +
> pebs_events="{instructions/period=40000,acr_mask=0x2/pu,cycles/period
> =20000,acr_mask=0x3/u}"
> + echo "Auto counter reload (ACR) sampling test"
> + if ! perf record -o "${perfdata}" -e "${events}" ${testprog} 2>
> /dev/null
> + then
> + echo "Auto counter reload sampling [Skipped not supported]"
> + return
> + fi
> + if ! perf script -i "${perfdata}" -F event | grep -q
> "instructions"
> + then
> + echo "Auto counter reload sampling [Failed missing instructions
> event]"
> + err=1
> + return
> + fi
> + if perf script -i "${perfdata}" -F event | grep -q "cycles"
> + then
> + echo "Auto counter reload sampling [Failed cycles event
> shouldn't be sampled]"
> + err=1
> + return
> + fi
> + if ! perf record -o "${perfdata}" -e "${pebs_events}" ${testprog}
> 2> /dev/null
> + then
> + echo "Auto counter reload PEBS sampling [Skipped not supported]"
> + echo "Auto counter reload sampling [Success]"
Should this "Success" message be here?
Thanks,
Tom
> + return
> + fi
> + if ! perf script -i "${perfdata}" -F event | grep -q
> "instructions"
> + then
> + echo "Auto counter reload PEBS sampling [Failed missing
> instructions event]"
> + err=1
> + return
> + fi
> + if perf script -i "${perfdata}" -F event | grep -q "cycles"
> + then
> + echo "Auto counter reload PEBS sampling [Failed cycles event
> shouldn't be sampled]"
> + err=1
> + return
> + fi
> + echo "Auto counter reload sampling [Success]"
> +}
> +
> test_ratio_to_prev() {
> + ratio_events="{instructions:u,cycles/period=20000,ratio-to-
> prev=0.5/u}"
> +
> p_core_ratio_events="{cpu_core/instructions/u,cpu_core/cycles,period=
> 20000,ratio-to-prev=0.5/u}"
> +
> e_core_ratio_events="{cpu_atom/instructions/u,cpu_atom/cycles,period=
> 20000,ratio-to-prev=0.5/u}"
> echo "ratio-to-prev test"
> if ! perf record -o /dev/null -e "{instructions,
> cycles/period=100000,ratio-to-prev=0.5/}" \
> true 2> /dev/null
> @@ -438,7 +483,51 @@ test_ratio_to_prev() {
> err=1
> return
> fi
> - echo "Basic ratio-to-prev record test [Success]"
> +
> + ratio_err=0
> + do_ratio_to_prev_test() {
> + local events=$1
> + local cpu=$2
> + if ! perf record -o "${perfdata}" -e "${events}" ${testprog} 2>
> /dev/null
> + then
> + echo "Auto counter reload ${cpu} ratio-to-prev sampling
> [Failed sampling]"
> + ratio_err=1
> + return
> + fi
> + if ! perf script -i "${perfdata}" -F event | grep -q
> "instructions"
> + then
> + echo "Auto counter reload ${cpu} ratio-to-prev sampling
> [Failed missing instructions event]"
> + ratio_err=1
> + return
> + fi
> + if perf script -i "${perfdata}" -F event | grep -q "cycles"
> + then
> + echo "Auto counter reload ${cpu} ratio-to-prev sampling
> [Failed cycles event shouldn't be sampled]"
> + ratio_err=1
> + return
> + fi
> + }
> +
> + # ratio-to-prev sampling would fallback to normal sampling if ACR
> sampling
> + # is not supported, so acr_mask must be checked before testing
> ratio-to-prev sampling.
> + if [ -e /sys/bus/event_source/devices/cpu/format/acr_mask ]
> + then
> + do_ratio_to_prev_test "${ratio_events}" ""
> + fi
> + if [ -e /sys/bus/event_source/devices/cpu_core/format/acr_mask ]
> + then
> + do_ratio_to_prev_test "${p_core_ratio_events}" "P-core"
> + fi
> + if [ -e /sys/bus/event_source/devices/cpu_atom/format/acr_mask ]
> + then
> + do_ratio_to_prev_test "${e_core_ratio_events}" "E-core"
> + fi
> + if test "$ratio_err" -eq 0
> + then
> + echo "Basic ratio-to-prev record test [Success]"
> + else
> + err="${ratio_err}"
> + fi
> }
>
> # raise the limit of file descriptors to minimum
> @@ -457,6 +546,7 @@ test_leader_sampling
> test_topdown_leader_sampling
> test_precise_max
> test_callgraph
> +test_acr_sampling
> test_ratio_to_prev
>
> # restore the default value