summaryrefslogtreecommitdiff
path: root/tools/perf/tests/shell/stat_all_metrics.sh
blob: b582d23f28c9e8e291555225429f644d27fd526f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
# perf all metrics test
# SPDX-License-Identifier: GPL-2.0

ParanoidAndNotRoot()
{
  [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
}

test_prog="sleep 0.01"
system_wide_flag="-a"
if ParanoidAndNotRoot 0
then
  system_wide_flag=""
  test_prog="perf test -w noploop"
fi

skip=0
err=3
for m in $(perf list --raw-dump metrics); do
  echo "Testing $m"
  result=$(perf stat -M "$m" $system_wide_flag -- $test_prog 2>&1)
  result_err=$?
  if [[ $result_err -eq 0 && "$result" =~ ${m:0:50} ]]
  then
    # No error result and metric shown.
    if [[ "$err" -ne 1 ]]
    then
      err=0
    fi
    continue
  fi
  if [[ "$result" =~ "Cannot resolve IDs for" || "$result" =~ "No supported events found" ]]
  then
    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 "[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 "[Skipped $m] Permission failure"
    echo $result
    if [[ $err -eq 0 ]]
    then
      skip=1
    fi
    continue
  elif [[ "$result" =~ "in per-thread mode, enable system wide" ]]
  then
    echo "[Skipped $m] Permissions - need system wide mode"
    echo $result
    if [[ $err -eq 0 ]]
    then
      skip=1
    fi
    continue
  elif [[ "$result" =~ "<not supported>" ]]
  then
    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
      skip=1
    fi
    continue
  elif [[ "$result" =~ "<not counted>" ]]
  then
    echo "[Skipped $m] Not counted events"
    echo $result
    if [[ $err -eq 0 ]]
    then
      skip=1
    fi
    continue
  elif [[ "$result" =~ "FP_ARITH" || "$result" =~ "AMX" ]]
  then
    echo "[Skipped $m] FP issues"
    echo $result
    if [[ $err -eq 0 ]]
    then
      skip=1
    fi
    continue
  elif [[ "$result" =~ "PMM" ]]
  then
    echo "[Skipped $m] Optane memory issues"
    echo $result
    if [[ $err -eq 0 ]]
    then
      skip=1
    fi
    continue
  fi

  # Failed, possibly the workload was too small so retry with something longer.
  result=$(perf stat -M "$m" $system_wide_flag -- perf bench internals synthesize 2>&1)
  result_err=$?
  if [[ $result_err -eq 0 && "$result" =~ ${m:0:50} ]]
  then
    # No error result and metric shown.
    if [[ "$err" -ne 1 ]]
    then
      err=0
    fi
    continue
  fi
  echo "[Failed $m] has non-zero error '$result_err' or not printed in:"
  echo "$result"
  err=1
done

# return SKIP only if no success returned
if [[ "$err" -eq 3 && "$skip" -eq 1 ]]
then
  err=2
fi

exit "$err"