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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Return true if perf_event_paranoid is > $1 and not running as root.
function ParanoidAndNotRoot()
{
[ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
}
# $1 name $2 extra_opt
check_no_args()
{
echo -n "Checking $1 output: no args "
perf stat $2 true
commachecker --no-args
echo "[Success]"
}
check_system_wide()
{
echo -n "Checking $1 output: system wide "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat -a $2 true
commachecker --system-wide
echo "[Success]"
}
check_system_wide_no_aggr()
{
echo -n "Checking $1 output: system wide no aggregation "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat -A -a --no-merge $2 true
commachecker --system-wide-no-aggr
echo "[Success]"
}
check_interval()
{
echo -n "Checking $1 output: interval "
perf stat -I 1000 $2 true
commachecker --interval
echo "[Success]"
}
check_event()
{
echo -n "Checking $1 output: event "
perf stat -e cpu-clock $2 true
commachecker --event
echo "[Success]"
}
check_per_core()
{
echo -n "Checking $1 output: per core "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat --per-core -a $2 true
commachecker --per-core
echo "[Success]"
}
check_per_thread()
{
echo -n "Checking $1 output: per thread "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat --per-thread -p $$ $2 true
commachecker --per-thread
echo "[Success]"
}
check_per_cache_instance()
{
echo -n "Checking $1 output: per cache instance "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat --per-cache -a $2 true
commachecker --per-cache
echo "[Success]"
}
check_per_cluster()
{
echo -n "Checking $1 output: per cluster "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat --per-cluster -a $2 true
echo "[Success]"
}
check_per_die()
{
echo -n "Checking $1 output: per die "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat --per-die -a $2 true
commachecker --per-die
echo "[Success]"
}
check_per_node()
{
echo -n "Checking $1 output: per node "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat --per-node -a $2 true
commachecker --per-node
echo "[Success]"
}
check_per_socket()
{
echo -n "Checking $1 output: per socket "
if ParanoidAndNotRoot 0
then
echo "[Skip] paranoid and not root"
return
fi
perf stat --per-socket -a $2 true
commachecker --per-socket
echo "[Success]"
}
check_metric_only()
{
echo -n "Checking $1 output: metric only "
if [ "$(uname -m)" = "s390x" ] && ! grep '^facilities' /proc/cpuinfo | grep -qw 67
then
echo "[Skip] CPU-measurement counter facility not installed"
return
fi
perf stat --metric-only $2 -e instructions,cycles true
commachecker --metric-only
echo "[Success]"
}
# The perf stat options for per-socket, per-core, per-die
# and -A ( no_aggr mode ) uses the info fetched from this
# directory: "/sys/devices/system/cpu/cpu*/topology". For
# example, socket value is fetched from "physical_package_id"
# file in topology directory.
# Reference: cpu__get_topology_int in util/cpumap.c
# If the platform doesn't expose topology information, values
# will be set to -1. For example, incase of pSeries platform
# of powerpc, value for "physical_package_id" is restricted
# and set to -1. Check here validates the socket-id read from
# topology file before proceeding further
FILE_LOC="/sys/devices/system/cpu/cpu*/topology/"
FILE_NAME="physical_package_id"
function check_for_topology()
{
if ! ParanoidAndNotRoot 0
then
socket_file=`ls $FILE_LOC/$FILE_NAME | head -n 1`
[ -z $socket_file ] && {
echo 0
return
}
socket_id=`cat $socket_file`
[ $socket_id == -1 ] && {
echo 1
return
}
fi
echo 0
}
|