195 lines · 3.9 KB · Shell
RawDownload
#!/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_optcheck_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 -M page_faults_per_second 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}