File Index
Files and directories
Sign in
FILE

stat_output.sh

File preview with syntax highlighting.

linux-6.19.14/tools/perf/tests/shell/lib/stat_output.sh BASH
  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 -p $$ $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
151check_metric_only()
152{
153	echo -n "Checking $1 output: metric only "
154	if [ "$(uname -m)" = "s390x" ] && ! grep '^facilities' /proc/cpuinfo  | grep -qw 67
155	then
156		echo "[Skip] CPU-measurement counter facility not installed"
157		return
158	fi
159	perf stat --metric-only $2 -M page_faults_per_second true
160	commachecker --metric-only
161	echo "[Success]"
162}
163
164# The perf stat options for per-socket, per-core, per-die
165# and -A ( no_aggr mode ) uses the info fetched from this
166# directory: "/sys/devices/system/cpu/cpu*/topology". For
167# example, socket value is fetched from "physical_package_id"
168# file in topology directory.
169# Reference: cpu__get_topology_int in util/cpumap.c
170# If the platform doesn't expose topology information, values
171# will be set to -1. For example, incase of pSeries platform
172# of powerpc, value for  "physical_package_id" is restricted
173# and set to -1. Check here validates the socket-id read from
174# topology file before proceeding further
175
176FILE_LOC="/sys/devices/system/cpu/cpu*/topology/"
177FILE_NAME="physical_package_id"
178
179function check_for_topology()
180{
181	if ! ParanoidAndNotRoot 0
182	then
183		socket_file=`ls $FILE_LOC/$FILE_NAME | head -n 1`
184		[ -z $socket_file ] && {
185			echo 0
186			return
187		}
188		socket_id=`cat $socket_file`
189		[ $socket_id == -1 ] && {
190			echo 1
191			return
192		}
193	fi
194	echo 0
195}
~/ Read-only file preview.