xref: /linux/tools/perf/tests/shell/stat_all_metrics.sh (revision af9e8d12b139c92e748eb2956bbef03315ea7516)
1#!/bin/bash
2# perf all metrics test
3# SPDX-License-Identifier: GPL-2.0
4
5ParanoidAndNotRoot()
6{
7  [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
8}
9
10test_prog="sleep 0.01"
11system_wide_flag="-a"
12if ParanoidAndNotRoot 0
13then
14  system_wide_flag=""
15  test_prog="perf test -w noploop"
16fi
17
18err=0
19for m in $(perf list --raw-dump metrics); do
20  echo "Testing $m"
21  result=$(perf stat -M "$m" $system_wide_flag -- $test_prog 2>&1)
22  result_err=$?
23  if [[ $result_err -eq 0 && "$result" =~ ${m:0:50} ]]
24  then
25    # No error result and metric shown.
26    continue
27  fi
28  if [[ "$result" =~ "Cannot resolve IDs for" || "$result" =~ "No supported events found" ]]
29  then
30    if [[ "$m" == @(l1_prefetch_miss_rate|stalled_cycles_per_instruction) ]]
31    then
32      # Default metrics that may use unsupported events.
33      continue
34    fi
35    echo "Metric contains missing events"
36    echo $result
37    err=1 # Fail
38    continue
39  elif [[ "$result" =~ \
40        "Access to performance monitoring and observability operations is limited" ]]
41  then
42    echo "Permission failure"
43    echo $result
44    if [[ $err -eq 0 ]]
45    then
46      err=2 # Skip
47    fi
48    continue
49  elif [[ "$result" =~ "in per-thread mode, enable system wide" ]]
50  then
51    echo "Permissions - need system wide mode"
52    echo $result
53    if [[ $err -eq 0 ]]
54    then
55      err=2 # Skip
56    fi
57    continue
58  elif [[ "$result" =~ "<not supported>" ]]
59  then
60    echo "Not supported events"
61    echo $result
62    if [[ $err -eq 0 ]]
63    then
64      err=2 # Skip
65    fi
66    continue
67  elif [[ "$result" =~ "<not counted>" ]]
68  then
69    echo "Not counted events"
70    echo $result
71    if [[ $err -eq 0 ]]
72    then
73      err=2 # Skip
74    fi
75    continue
76  elif [[ "$result" =~ "FP_ARITH" || "$result" =~ "AMX" ]]
77  then
78    echo "FP issues"
79    echo $result
80    if [[ $err -eq 0 ]]
81    then
82      err=2 # Skip
83    fi
84    continue
85  elif [[ "$result" =~ "PMM" ]]
86  then
87    echo "Optane memory issues"
88    echo $result
89    if [[ $err -eq 0 ]]
90    then
91      err=2 # Skip
92    fi
93    continue
94  fi
95
96  # Failed, possibly the workload was too small so retry with something longer.
97  result=$(perf stat -M "$m" $system_wide_flag -- perf bench internals synthesize 2>&1)
98  result_err=$?
99  if [[ $result_err -eq 0 && "$result" =~ ${m:0:50} ]]
100  then
101    # No error result and metric shown.
102    continue
103  fi
104  echo "Metric '$m' has non-zero error '$result_err' or not printed in:"
105  echo "$result"
106  err=1
107done
108
109exit "$err"
110