[PATCH v1] perf test all metrics: Fully ignore Default metric failures

Ian Rogers posted 1 patch 1 week, 5 days ago
tools/perf/tests/shell/stat_all_metrics.sh | 27 ++++++++++++++--------
1 file changed, 17 insertions(+), 10 deletions(-)
[PATCH v1] perf test all metrics: Fully ignore Default metric failures
Posted by Ian Rogers 1 week, 5 days ago
Determine if a metric is default from `perf list --raw-dump $m` eg:
```
$ perf list --raw-dump l1_prefetch_miss_rate
Default4 l1_prefetch_miss_rate
```
If a metric has "not supported" or "no supported events" then ignore
these failures for default metrics. Tidy up the skip/fail messages in
the output to make them easier to spot/read.

Reported-by: Thomas Richter <tmricht@linux.ibm.com>
Closes: https://lore.kernel.org/linux-perf-users/20251119104751.51960-1-tmricht@linux.ibm.com/
Reported-by: Namhyung Kim <namhyung@kernel.org>
Reported-by: James Clark <james.clark@linaro.org>
Closes: https://lore.kernel.org/lkml/aRi9xnwdLh3Dir9f@google.com/
Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/tests/shell/stat_all_metrics.sh | 27 ++++++++++++++--------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/tools/perf/tests/shell/stat_all_metrics.sh b/tools/perf/tests/shell/stat_all_metrics.sh
index a7edf01b3943..3dabb39c7cc8 100755
--- a/tools/perf/tests/shell/stat_all_metrics.sh
+++ b/tools/perf/tests/shell/stat_all_metrics.sh
@@ -27,19 +27,20 @@ for m in $(perf list --raw-dump metrics); do
   fi
   if [[ "$result" =~ "Cannot resolve IDs for" || "$result" =~ "No supported events found" ]]
   then
-    if [[ "$m" == @(l1_prefetch_miss_rate|stalled_cycles_per_instruction) ]]
+    if [[ $(perf list --raw-dump $m) == "Default"* ]]
     then
-      # Default metrics that may use unsupported events.
+      echo "[Ignored $m] failed but as a Default metric this can be expected"
+      echo $result
       continue
     fi
-    echo "Metric contains missing events"
+    echo "[Failed $m] Metric contains missing events"
     echo $result
     err=1 # Fail
     continue
   elif [[ "$result" =~ \
         "Access to performance monitoring and observability operations is limited" ]]
   then
-    echo "Permission failure"
+    echo "[Skipped $m] Permission failure"
     echo $result
     if [[ $err -eq 0 ]]
     then
@@ -48,7 +49,7 @@ for m in $(perf list --raw-dump metrics); do
     continue
   elif [[ "$result" =~ "in per-thread mode, enable system wide" ]]
   then
-    echo "Permissions - need system wide mode"
+    echo "[Skipped $m] Permissions - need system wide mode"
     echo $result
     if [[ $err -eq 0 ]]
     then
@@ -57,7 +58,13 @@ for m in $(perf list --raw-dump metrics); do
     continue
   elif [[ "$result" =~ "<not supported>" ]]
   then
-    echo "Not supported events"
+    if [[ $(perf list --raw-dump $m) == "Default"* ]]
+    then
+      echo "[Ignored $m] failed but as a Default metric this can be expected"
+      echo $result
+      continue
+    fi
+    echo "[Skipped $m] Not supported events"
     echo $result
     if [[ $err -eq 0 ]]
     then
@@ -66,7 +73,7 @@ for m in $(perf list --raw-dump metrics); do
     continue
   elif [[ "$result" =~ "<not counted>" ]]
   then
-    echo "Not counted events"
+    echo "[Skipped $m] Not counted events"
     echo $result
     if [[ $err -eq 0 ]]
     then
@@ -75,7 +82,7 @@ for m in $(perf list --raw-dump metrics); do
     continue
   elif [[ "$result" =~ "FP_ARITH" || "$result" =~ "AMX" ]]
   then
-    echo "FP issues"
+    echo "[Skipped $m] FP issues"
     echo $result
     if [[ $err -eq 0 ]]
     then
@@ -84,7 +91,7 @@ for m in $(perf list --raw-dump metrics); do
     continue
   elif [[ "$result" =~ "PMM" ]]
   then
-    echo "Optane memory issues"
+    echo "[Skipped $m] Optane memory issues"
     echo $result
     if [[ $err -eq 0 ]]
     then
@@ -101,7 +108,7 @@ for m in $(perf list --raw-dump metrics); do
     # No error result and metric shown.
     continue
   fi
-  echo "Metric '$m' has non-zero error '$result_err' or not printed in:"
+  echo "[Failed $m] has non-zero error '$result_err' or not printed in:"
   echo "$result"
   err=1
 done
-- 
2.52.0.rc1.455.g30608eb744-goog
Re: [PATCH v1] perf test all metrics: Fully ignore Default metric failures
Posted by Namhyung Kim 1 week, 3 days ago
On Wed, 19 Nov 2025 11:30:47 -0800, Ian Rogers wrote:
> Determine if a metric is default from `perf list --raw-dump $m` eg:
> ```
> $ perf list --raw-dump l1_prefetch_miss_rate
> Default4 l1_prefetch_miss_rate
> ```
> If a metric has "not supported" or "no supported events" then ignore
> these failures for default metrics. Tidy up the skip/fail messages in
> the output to make them easier to spot/read.
> 
> [...]
Applied to perf-tools-next, thanks!

Best regards,
Namhyung
Re: [PATCH v1] perf test all metrics: Fully ignore Default metric failures
Posted by Namhyung Kim 1 week, 4 days ago
On Wed, Nov 19, 2025 at 11:30:47AM -0800, Ian Rogers wrote:
> Determine if a metric is default from `perf list --raw-dump $m` eg:
> ```
> $ perf list --raw-dump l1_prefetch_miss_rate
> Default4 l1_prefetch_miss_rate
> ```
> If a metric has "not supported" or "no supported events" then ignore
> these failures for default metrics. Tidy up the skip/fail messages in
> the output to make them easier to spot/read.
> 
> Reported-by: Thomas Richter <tmricht@linux.ibm.com>
> Closes: https://lore.kernel.org/linux-perf-users/20251119104751.51960-1-tmricht@linux.ibm.com/
> Reported-by: Namhyung Kim <namhyung@kernel.org>
> Reported-by: James Clark <james.clark@linaro.org>
> Closes: https://lore.kernel.org/lkml/aRi9xnwdLh3Dir9f@google.com/
> Signed-off-by: Ian Rogers <irogers@google.com>

Thanks for the fix!

  $ sudo ./perf test -vv "all metrics"
  103: perf all metrics test:
  --- start ---
  test child forked, pid 3329979
  Testing CPUs_utilized
  Testing backend_cycles_idle
  [Ignored backend_cycles_idle] failed but as a Default metric this can be expected
  Performance counter stats for 'system wide': <not counted> cpu-cycles <not supported> stalled-cycles-backend 0.013059060 seconds time elapsed
  Testing branch_frequency
  Testing branch_miss_rate
  Testing cs_per_second
  Testing cycles_frequency
  Testing frontend_cycles_idle
  Testing insn_per_cycle
  Testing migrations_per_second
  Testing page_faults_per_second
  Testing stalled_cycles_per_instruction
  [Ignored stalled_cycles_per_instruction] failed but as a Default metric this can be expected
  Error: No supported events found. The stalled-cycles-backend event is not supported.
  Testing l1d_miss_rate
  Testing llc_miss_rate
  [Ignored llc_miss_rate] failed but as a Default metric this can be expected
  Error: No supported events found. The LLC-loads event is not supported.
  Testing dtlb_miss_rate
  Testing itlb_miss_rate
  Testing l1i_miss_rate
  Testing l1_prefetch_miss_rate
  [Ignored l1_prefetch_miss_rate] failed but as a Default metric this can be expected
  Performance counter stats for 'system wide': <not counted> L1-dcache-prefetches <not supported> L1-dcache-prefetch-misses 0.012868128 seconds time elapsed
  Testing branch_misprediction_ratio
  Testing all_remote_links_outbound
  Testing nps1_die_to_dram
  Testing all_l2_cache_accesses
  Testing all_l2_cache_hits
  Testing all_l2_cache_misses
  Testing ic_fetch_miss_ratio
  Testing l2_cache_accesses_from_l2_hwpf
  Testing l2_cache_misses_from_l2_hwpf
  Testing l3_read_miss_latency
  Testing l1_itlb_misses
  ---- end(0) ----
  103: perf all metrics test                                           : Ok
Re: [PATCH v1] perf test all metrics: Fully ignore Default metric failures
Posted by James Clark 1 week, 4 days ago

On 19/11/2025 7:30 pm, Ian Rogers wrote:
> Determine if a metric is default from `perf list --raw-dump $m` eg:
> ```
> $ perf list --raw-dump l1_prefetch_miss_rate
> Default4 l1_prefetch_miss_rate
> ```
> If a metric has "not supported" or "no supported events" then ignore
> these failures for default metrics. Tidy up the skip/fail messages in
> the output to make them easier to spot/read.
> 
> Reported-by: Thomas Richter <tmricht@linux.ibm.com>
> Closes: https://lore.kernel.org/linux-perf-users/20251119104751.51960-1-tmricht@linux.ibm.com/
> Reported-by: Namhyung Kim <namhyung@kernel.org>
> Reported-by: James Clark <james.clark@linaro.org>
> Closes: https://lore.kernel.org/lkml/aRi9xnwdLh3Dir9f@google.com/
> Signed-off-by: Ian Rogers <irogers@google.com>

Reviewed-by: James Clark <james.clark@linaro.org>

> ---
>   tools/perf/tests/shell/stat_all_metrics.sh | 27 ++++++++++++++--------
>   1 file changed, 17 insertions(+), 10 deletions(-)
> 
> diff --git a/tools/perf/tests/shell/stat_all_metrics.sh b/tools/perf/tests/shell/stat_all_metrics.sh
> index a7edf01b3943..3dabb39c7cc8 100755
> --- a/tools/perf/tests/shell/stat_all_metrics.sh
> +++ b/tools/perf/tests/shell/stat_all_metrics.sh
> @@ -27,19 +27,20 @@ for m in $(perf list --raw-dump metrics); do
>     fi
>     if [[ "$result" =~ "Cannot resolve IDs for" || "$result" =~ "No supported events found" ]]
>     then
> -    if [[ "$m" == @(l1_prefetch_miss_rate|stalled_cycles_per_instruction) ]]
> +    if [[ $(perf list --raw-dump $m) == "Default"* ]]
>       then
> -      # Default metrics that may use unsupported events.
> +      echo "[Ignored $m] failed but as a Default metric this can be expected"
> +      echo $result
>         continue
>       fi
> -    echo "Metric contains missing events"
> +    echo "[Failed $m] Metric contains missing events"
>       echo $result
>       err=1 # Fail
>       continue
>     elif [[ "$result" =~ \
>           "Access to performance monitoring and observability operations is limited" ]]
>     then
> -    echo "Permission failure"
> +    echo "[Skipped $m] Permission failure"
>       echo $result
>       if [[ $err -eq 0 ]]
>       then
> @@ -48,7 +49,7 @@ for m in $(perf list --raw-dump metrics); do
>       continue
>     elif [[ "$result" =~ "in per-thread mode, enable system wide" ]]
>     then
> -    echo "Permissions - need system wide mode"
> +    echo "[Skipped $m] Permissions - need system wide mode"
>       echo $result
>       if [[ $err -eq 0 ]]
>       then
> @@ -57,7 +58,13 @@ for m in $(perf list --raw-dump metrics); do
>       continue
>     elif [[ "$result" =~ "<not supported>" ]]
>     then
> -    echo "Not supported events"
> +    if [[ $(perf list --raw-dump $m) == "Default"* ]]
> +    then
> +      echo "[Ignored $m] failed but as a Default metric this can be expected"
> +      echo $result
> +      continue
> +    fi
> +    echo "[Skipped $m] Not supported events"
>       echo $result
>       if [[ $err -eq 0 ]]
>       then
> @@ -66,7 +73,7 @@ for m in $(perf list --raw-dump metrics); do
>       continue
>     elif [[ "$result" =~ "<not counted>" ]]
>     then
> -    echo "Not counted events"
> +    echo "[Skipped $m] Not counted events"
>       echo $result
>       if [[ $err -eq 0 ]]
>       then
> @@ -75,7 +82,7 @@ for m in $(perf list --raw-dump metrics); do
>       continue
>     elif [[ "$result" =~ "FP_ARITH" || "$result" =~ "AMX" ]]
>     then
> -    echo "FP issues"
> +    echo "[Skipped $m] FP issues"
>       echo $result
>       if [[ $err -eq 0 ]]
>       then
> @@ -84,7 +91,7 @@ for m in $(perf list --raw-dump metrics); do
>       continue
>     elif [[ "$result" =~ "PMM" ]]
>     then
> -    echo "Optane memory issues"
> +    echo "[Skipped $m] Optane memory issues"
>       echo $result
>       if [[ $err -eq 0 ]]
>       then
> @@ -101,7 +108,7 @@ for m in $(perf list --raw-dump metrics); do
>       # No error result and metric shown.
>       continue
>     fi
> -  echo "Metric '$m' has non-zero error '$result_err' or not printed in:"
> +  echo "[Failed $m] has non-zero error '$result_err' or not printed in:"
>     echo "$result"
>     err=1
>   done
Re: [PATCH v1] perf test all metrics: Fully ignore Default metric failures
Posted by Thomas Richter 1 week, 4 days ago
On 11/19/25 20:30, Ian Rogers wrote:
> Reported-by: Thomas Richter <tmricht@linux.ibm.com>

Tested-by: Thomas Richter <tmricht@linux.ibm.com>


Thanks for fixing this.
-- 
Thomas Richter, Dept 3303, IBM s390 Linux Development, Boeblingen, Germany
--
IBM Deutschland Research & Development GmbH

Vorsitzender des Aufsichtsrats: Wolfgang Wendt

Geschäftsführung: David Faller

Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294