Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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" ]]
29 then
30 echo "Metric contains missing events"
31 echo $result
32 err=1 # Fail
33 continue
34 elif [[ "$result" =~ \
35 "Access to performance monitoring and observability operations is limited" ]]
36 then
37 echo "Permission failure"
38 echo $result
39 if [[ $err -eq 0 ]]
40 then
41 err=2 # Skip
42 fi
43 continue
44 elif [[ "$result" =~ "in per-thread mode, enable system wide" ]]
45 then
46 echo "Permissions - need system wide mode"
47 echo $result
48 if [[ $err -eq 0 ]]
49 then
50 err=2 # Skip
51 fi
52 continue
53 elif [[ "$result" =~ "<not supported>" ]]
54 then
55 echo "Not supported events"
56 echo $result
57 if [[ $err -eq 0 ]]
58 then
59 err=2 # Skip
60 fi
61 continue
62 elif [[ "$result" =~ "<not counted>" ]]
63 then
64 echo "Not counted events"
65 echo $result
66 if [[ $err -eq 0 ]]
67 then
68 err=2 # Skip
69 fi
70 continue
71 elif [[ "$result" =~ "FP_ARITH" || "$result" =~ "AMX" ]]
72 then
73 echo "FP issues"
74 echo $result
75 if [[ $err -eq 0 ]]
76 then
77 err=2 # Skip
78 fi
79 continue
80 elif [[ "$result" =~ "PMM" ]]
81 then
82 echo "Optane memory issues"
83 echo $result
84 if [[ $err -eq 0 ]]
85 then
86 err=2 # Skip
87 fi
88 continue
89 fi
90
91 # Failed, possibly the workload was too small so retry with something longer.
92 result=$(perf stat -M "$m" $system_wide_flag -- perf bench internals synthesize 2>&1)
93 result_err=$?
94 if [[ $result_err -eq 0 && "$result" =~ ${m:0:50} ]]
95 then
96 # No error result and metric shown.
97 continue
98 fi
99 echo "Metric '$m' has non-zero error '$result_err' or not printed in:"
100 echo "$result"
101 err=1
102done
103
104exit "$err"