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"
|