Loading...
Note: File does not exist in v3.15.
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4# Return true if perf_event_paranoid is > $1 and not running as root.
5function ParanoidAndNotRoot()
6{
7 [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
8}
9
10# $1 name $2 extra_opt
11check_no_args()
12{
13 echo -n "Checking $1 output: no args "
14 perf stat $2 true
15 commachecker --no-args
16 echo "[Success]"
17}
18
19check_system_wide()
20{
21 echo -n "Checking $1 output: system wide "
22 if ParanoidAndNotRoot 0
23 then
24 echo "[Skip] paranoid and not root"
25 return
26 fi
27 perf stat -a $2 true
28 commachecker --system-wide
29 echo "[Success]"
30}
31
32check_system_wide_no_aggr()
33{
34 echo -n "Checking $1 output: system wide no aggregation "
35 if ParanoidAndNotRoot 0
36 then
37 echo "[Skip] paranoid and not root"
38 return
39 fi
40 perf stat -A -a --no-merge $2 true
41 commachecker --system-wide-no-aggr
42 echo "[Success]"
43}
44
45check_interval()
46{
47 echo -n "Checking $1 output: interval "
48 perf stat -I 1000 $2 true
49 commachecker --interval
50 echo "[Success]"
51}
52
53check_event()
54{
55 echo -n "Checking $1 output: event "
56 perf stat -e cpu-clock $2 true
57 commachecker --event
58 echo "[Success]"
59}
60
61check_per_core()
62{
63 echo -n "Checking $1 output: per core "
64 if ParanoidAndNotRoot 0
65 then
66 echo "[Skip] paranoid and not root"
67 return
68 fi
69 perf stat --per-core -a $2 true
70 commachecker --per-core
71 echo "[Success]"
72}
73
74check_per_thread()
75{
76 echo -n "Checking $1 output: per thread "
77 if ParanoidAndNotRoot 0
78 then
79 echo "[Skip] paranoid and not root"
80 return
81 fi
82 perf stat --per-thread -a $2 true
83 commachecker --per-thread
84 echo "[Success]"
85}
86
87check_per_cache_instance()
88{
89 echo -n "Checking $1 output: per cache instance "
90 if ParanoidAndNotRoot 0
91 then
92 echo "[Skip] paranoid and not root"
93 return
94 fi
95 perf stat --per-cache -a $2 true
96 commachecker --per-cache
97 echo "[Success]"
98}
99
100check_per_cluster()
101{
102 echo -n "Checking $1 output: per cluster "
103 if ParanoidAndNotRoot 0
104 then
105 echo "[Skip] paranoid and not root"
106 return
107 fi
108 perf stat --per-cluster -a $2 true
109 echo "[Success]"
110}
111
112check_per_die()
113{
114 echo -n "Checking $1 output: per die "
115 if ParanoidAndNotRoot 0
116 then
117 echo "[Skip] paranoid and not root"
118 return
119 fi
120 perf stat --per-die -a $2 true
121 commachecker --per-die
122 echo "[Success]"
123}
124
125check_per_node()
126{
127 echo -n "Checking $1 output: per node "
128 if ParanoidAndNotRoot 0
129 then
130 echo "[Skip] paranoid and not root"
131 return
132 fi
133 perf stat --per-node -a $2 true
134 commachecker --per-node
135 echo "[Success]"
136}
137
138check_per_socket()
139{
140 echo -n "Checking $1 output: per socket "
141 if ParanoidAndNotRoot 0
142 then
143 echo "[Skip] paranoid and not root"
144 return
145 fi
146 perf stat --per-socket -a $2 true
147 commachecker --per-socket
148 echo "[Success]"
149}
150
151# The perf stat options for per-socket, per-core, per-die
152# and -A ( no_aggr mode ) uses the info fetched from this
153# directory: "/sys/devices/system/cpu/cpu*/topology". For
154# example, socket value is fetched from "physical_package_id"
155# file in topology directory.
156# Reference: cpu__get_topology_int in util/cpumap.c
157# If the platform doesn't expose topology information, values
158# will be set to -1. For example, incase of pSeries platform
159# of powerpc, value for "physical_package_id" is restricted
160# and set to -1. Check here validates the socket-id read from
161# topology file before proceeding further
162
163FILE_LOC="/sys/devices/system/cpu/cpu*/topology/"
164FILE_NAME="physical_package_id"
165
166function check_for_topology()
167{
168 if ! ParanoidAndNotRoot 0
169 then
170 socket_file=`ls $FILE_LOC/$FILE_NAME | head -n 1`
171 [ -z $socket_file ] && {
172 echo 0
173 return
174 }
175 socket_id=`cat $socket_file`
176 [ $socket_id == -1 ] && {
177 echo 1
178 return
179 }
180 fi
181 echo 0
182}