Merge tag 'io_uring-5.19-2022-07-01' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / tools / perf / tests / shell / stat+csv_output.sh
1 #!/bin/bash
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 ','.
6
7 set -e
8
9 function commachecker()
10 {
11         local -i cnt=0 exp=0
12
13         case "$1"
14         in "--no-args")         exp=6
15         ;; "--system-wide")     exp=6
16         ;; "--event")           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
24         ;; "--per-die")         exp=8
25         esac
26
27         while read line
28         do
29                 # Check for lines beginning with Failed
30                 x=${line:0:6}
31                 [ "$x" = "Failed" ] && continue
32
33                 # Count the number of commas
34                 x=$(echo $line | tr -d -c ',')
35                 cnt="${#x}"
36                 # echo $line $cnt
37                 [ "$cnt" -ne "$exp" ] && {
38                         echo "wrong number of fields. expected $exp in $line" 1>&2
39                         exit 1;
40                 }
41         done
42         return 0
43 }
44
45 # Return true if perf_event_paranoid is > $1 and not running as root.
46 function ParanoidAndNotRoot()
47 {
48          [ $(id -u) != 0 ] && [ $(cat /proc/sys/kernel/perf_event_paranoid) -gt $1 ]
49 }
50
51 check_no_args()
52 {
53         echo -n "Checking CSV output: no args "
54         perf stat -x, true 2>&1 | commachecker --no-args
55         echo "[Success]"
56 }
57
58 check_system_wide()
59 {
60         echo -n "Checking CSV output: system wide "
61         if ParanoidAndNotRoot 0
62         then
63                 echo "[Skip] paranoid and not root"
64                 return
65         fi
66         perf stat -x, -a true 2>&1 | commachecker --system-wide
67         echo "[Success]"
68 }
69
70 check_system_wide_no_aggr()
71 {
72         echo -n "Checking CSV output: system wide "
73         if ParanoidAndNotRoot 0
74         then
75                 echo "[Skip] paranoid and not root"
76                 return
77         fi
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
80         echo "[Success]"
81 }
82
83 check_interval()
84 {
85         echo -n "Checking CSV output: interval "
86         perf stat -x, -I 1000 true 2>&1 | commachecker --interval
87         echo "[Success]"
88 }
89
90
91 check_event()
92 {
93         echo -n "Checking CSV output: event "
94         perf stat -x, -e cpu-clock true 2>&1 | commachecker --event
95         echo "[Success]"
96 }
97
98 check_per_core()
99 {
100         echo -n "Checking CSV output: per core "
101         if ParanoidAndNotRoot 0
102         then
103                 echo "[Skip] paranoid and not root"
104                 return
105         fi
106         perf stat -x, --per-core -a true 2>&1 | commachecker --per-core
107         echo "[Success]"
108 }
109
110 check_per_thread()
111 {
112         echo -n "Checking CSV output: per thread "
113         if ParanoidAndNotRoot 0
114         then
115                 echo "[Skip] paranoid and not root"
116                 return
117         fi
118         perf stat -x, --per-thread -a true 2>&1 | commachecker --per-thread
119         echo "[Success]"
120 }
121
122 check_per_die()
123 {
124         echo -n "Checking CSV output: per die "
125         if ParanoidAndNotRoot 0
126         then
127                 echo "[Skip] paranoid and not root"
128                 return
129         fi
130         perf stat -x, --per-die -a true 2>&1 | commachecker --per-die
131         echo "[Success]"
132 }
133
134 check_per_node()
135 {
136         echo -n "Checking CSV output: per node "
137         if ParanoidAndNotRoot 0
138         then
139                 echo "[Skip] paranoid and not root"
140                 return
141         fi
142         perf stat -x, --per-node -a true 2>&1 | commachecker --per-node
143         echo "[Success]"
144 }
145
146 check_per_socket()
147 {
148         echo -n "Checking CSV output: per socket "
149         if ParanoidAndNotRoot 0
150         then
151                 echo "[Skip] paranoid and not root"
152                 return
153         fi
154         perf stat -x, --per-socket -a true 2>&1 | commachecker --per-socket
155         echo "[Success]"
156 }
157
158 check_no_args
159 check_system_wide
160 check_system_wide_no_aggr
161 check_interval
162 check_event
163 check_per_core
164 check_per_thread
165 check_per_die
166 check_per_node
167 check_per_socket
168 exit 0