[PATCH v1 1/4] perf test shell lbr: Avoid failures with perf event paranoia

Ian Rogers posted 4 patches 1 month, 1 week ago
There is a newer version of this series
[PATCH v1 1/4] perf test shell lbr: Avoid failures with perf event paranoia
Posted by Ian Rogers 1 month, 1 week ago
When not running as root and with higher perf event paranoia values
the perf record LBR tests could fail rather than skipping the
problematic tests. Add the sensitivity to the test and confirm it
passes with paranoia values from -1 to 2.

Fixes: 32559b99e0f5 ("perf test: Add set of perf record LBR tests")
Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/tests/shell/record_lbr.sh | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/tools/perf/tests/shell/record_lbr.sh b/tools/perf/tests/shell/record_lbr.sh
index 6fcb5e52b9b4..78a02e90ece1 100755
--- a/tools/perf/tests/shell/record_lbr.sh
+++ b/tools/perf/tests/shell/record_lbr.sh
@@ -4,6 +4,10 @@
 
 set -e
 
+ParanoidAndNotRoot() {
+  [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
+}
+
 if [ ! -f /sys/bus/event_source/devices/cpu/caps/branches ] &&
    [ ! -f /sys/bus/event_source/devices/cpu_core/caps/branches ]
 then
@@ -23,6 +27,7 @@ cleanup() {
 }
 
 trap_cleanup() {
+  echo "Unexpected signal in ${FUNCNAME[1]}"
   cleanup
   exit 1
 }
@@ -123,8 +128,11 @@ lbr_test "-j ind_call" "any indirect call" 2
 lbr_test "-j ind_jmp" "any indirect jump" 100
 lbr_test "-j call" "direct calls" 2
 lbr_test "-j ind_call,u" "any indirect user call" 100
-lbr_test "-a -b" "system wide any branch" 2
-lbr_test "-a -j any_call" "system wide any call" 2
+if ! ParanoidAndNotRoot 1
+then
+  lbr_test "-a -b" "system wide any branch" 2
+  lbr_test "-a -j any_call" "system wide any call" 2
+fi
 
 # Parallel
 parallel_lbr_test "-b" "parallel any branch" 100 &
@@ -141,10 +149,16 @@ parallel_lbr_test "-j call" "parallel direct calls" 100 &
 pid6=$!
 parallel_lbr_test "-j ind_call,u" "parallel any indirect user call" 100 &
 pid7=$!
-parallel_lbr_test "-a -b" "parallel system wide any branch" 100 &
-pid8=$!
-parallel_lbr_test "-a -j any_call" "parallel system wide any call" 100 &
-pid9=$!
+if ParanoidAndNotRoot 1
+then
+  pid8=
+  pid9=
+else
+  parallel_lbr_test "-a -b" "parallel system wide any branch" 100 &
+  pid8=$!
+  parallel_lbr_test "-a -j any_call" "parallel system wide any call" 100 &
+  pid9=$!
+fi
 
 for pid in $pid1 $pid2 $pid3 $pid4 $pid5 $pid6 $pid7 $pid8 $pid9
 do
-- 
2.51.0.rc2.233.g662b1ed5c5-goog
Re: [PATCH v1 1/4] perf test shell lbr: Avoid failures with perf event paranoia
Posted by Arnaldo Carvalho de Melo 2 weeks, 3 days ago
On Thu, Aug 21, 2025 at 03:18:31PM -0700, Ian Rogers wrote:
> When not running as root and with higher perf event paranoia values
> the perf record LBR tests could fail rather than skipping the
> problematic tests. Add the sensitivity to the test and confirm it
> passes with paranoia values from -1 to 2.

Thanks, applied to perf-tools-next,

Committer testing:

Testing with '$ perf test -vv lbr', i.e. as non root, and then comparing
the output shows the mentioned errors before this patch:

  acme@x1:~$ grep -m1 "model name" /proc/cpuinfo
  model name    : 13th Gen Intel(R) Core(TM) i7-1365U
  acme@x1:~$ 

Before:

 132: perf record LBR tests            : Skip

After:

 132: perf record LBR tests            : Ok

- Arnaldo
 
> Fixes: 32559b99e0f5 ("perf test: Add set of perf record LBR tests")
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/tests/shell/record_lbr.sh | 26 ++++++++++++++++++++------
>  1 file changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/tools/perf/tests/shell/record_lbr.sh b/tools/perf/tests/shell/record_lbr.sh
> index 6fcb5e52b9b4..78a02e90ece1 100755
> --- a/tools/perf/tests/shell/record_lbr.sh
> +++ b/tools/perf/tests/shell/record_lbr.sh
> @@ -4,6 +4,10 @@
>  
>  set -e
>  
> +ParanoidAndNotRoot() {
> +  [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
> +}
> +
>  if [ ! -f /sys/bus/event_source/devices/cpu/caps/branches ] &&
>     [ ! -f /sys/bus/event_source/devices/cpu_core/caps/branches ]
>  then
> @@ -23,6 +27,7 @@ cleanup() {
>  }
>  
>  trap_cleanup() {
> +  echo "Unexpected signal in ${FUNCNAME[1]}"
>    cleanup
>    exit 1
>  }
> @@ -123,8 +128,11 @@ lbr_test "-j ind_call" "any indirect call" 2
>  lbr_test "-j ind_jmp" "any indirect jump" 100
>  lbr_test "-j call" "direct calls" 2
>  lbr_test "-j ind_call,u" "any indirect user call" 100
> -lbr_test "-a -b" "system wide any branch" 2
> -lbr_test "-a -j any_call" "system wide any call" 2
> +if ! ParanoidAndNotRoot 1
> +then
> +  lbr_test "-a -b" "system wide any branch" 2
> +  lbr_test "-a -j any_call" "system wide any call" 2
> +fi
>  
>  # Parallel
>  parallel_lbr_test "-b" "parallel any branch" 100 &
> @@ -141,10 +149,16 @@ parallel_lbr_test "-j call" "parallel direct calls" 100 &
>  pid6=$!
>  parallel_lbr_test "-j ind_call,u" "parallel any indirect user call" 100 &
>  pid7=$!
> -parallel_lbr_test "-a -b" "parallel system wide any branch" 100 &
> -pid8=$!
> -parallel_lbr_test "-a -j any_call" "parallel system wide any call" 100 &
> -pid9=$!
> +if ParanoidAndNotRoot 1
> +then
> +  pid8=
> +  pid9=
> +else
> +  parallel_lbr_test "-a -b" "parallel system wide any branch" 100 &
> +  pid8=$!
> +  parallel_lbr_test "-a -j any_call" "parallel system wide any call" 100 &
> +  pid9=$!
> +fi
>  
>  for pid in $pid1 $pid2 $pid3 $pid4 $pid5 $pid6 $pid7 $pid8 $pid9
>  do
> -- 
> 2.51.0.rc2.233.g662b1ed5c5-goog