2 # perf stat CSV output linter
3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
4 # Tests various perf stat CSV output commands for the
5 # correct number of fields and the CSV separator set to ','.
9 function commachecker()
15 ;; "--system-wide") exp=6
17 ;; "--interval") exp=7
18 ;; "--per-thread") exp=7
19 ;; "--system-wide-no-aggr") exp=7
20 [ $(uname -m) = "s390x" ] && exp=6
21 ;; "--per-core") exp=8
22 ;; "--per-socket") exp=8
23 ;; "--per-node") exp=8
29 # Check for lines beginning with Failed
31 [ "$x" = "Failed" ] && continue
33 # Count the number of commas
34 x=$(echo $line | tr -d -c ',')
37 [ "$cnt" -ne "$exp" ] && {
38 echo "wrong number of fields. expected $exp in $line" 1>&2
45 # Return true if perf_event_paranoid is > $1 and not running as root.
46 function ParanoidAndNotRoot()
48 [ $(id -u) != 0 ] && [ $(cat /proc/sys/kernel/perf_event_paranoid) -gt $1 ]
53 echo -n "Checking CSV output: no args "
54 perf stat -x, true 2>&1 | commachecker --no-args
60 echo -n "Checking CSV output: system wide "
61 if ParanoidAndNotRoot 0
63 echo "[Skip] paranoid and not root"
66 perf stat -x, -a true 2>&1 | commachecker --system-wide
70 check_system_wide_no_aggr()
72 echo -n "Checking CSV output: system wide "
73 if ParanoidAndNotRoot 0
75 echo "[Skip] paranoid and not root"
78 echo -n "Checking CSV output: system wide no aggregation "
79 perf stat -x, -A -a --no-merge true 2>&1 | commachecker --system-wide-no-aggr
85 echo -n "Checking CSV output: interval "
86 perf stat -x, -I 1000 true 2>&1 | commachecker --interval
93 echo -n "Checking CSV output: event "
94 perf stat -x, -e cpu-clock true 2>&1 | commachecker --event
100 echo -n "Checking CSV output: per core "
101 if ParanoidAndNotRoot 0
103 echo "[Skip] paranoid and not root"
106 perf stat -x, --per-core -a true 2>&1 | commachecker --per-core
112 echo -n "Checking CSV output: per thread "
113 if ParanoidAndNotRoot 0
115 echo "[Skip] paranoid and not root"
118 perf stat -x, --per-thread -a true 2>&1 | commachecker --per-thread
124 echo -n "Checking CSV output: per die "
125 if ParanoidAndNotRoot 0
127 echo "[Skip] paranoid and not root"
130 perf stat -x, --per-die -a true 2>&1 | commachecker --per-die
136 echo -n "Checking CSV output: per node "
137 if ParanoidAndNotRoot 0
139 echo "[Skip] paranoid and not root"
142 perf stat -x, --per-node -a true 2>&1 | commachecker --per-node
148 echo -n "Checking CSV output: per socket "
149 if ParanoidAndNotRoot 0
151 echo "[Skip] paranoid and not root"
154 perf stat -x, --per-socket -a true 2>&1 | commachecker --per-socket
160 check_system_wide_no_aggr