Skip to content

Commit 58d4802

Browse files
athira-rajeevacmel
authored andcommitted
perf tests stat+json_output: Include sanity check for topology
Testcase stat+json_output.sh fails in powerpc: 86: perf stat JSON output linter : FAILED! The testcase "stat+json_output.sh" verifies perf stat JSON output. The test covers aggregation modes like per-socket, per-core, per-die, -A (no_aggr mode) along with few other tests. It counts expected fields for various commands. For example say -A (i.e, AGGR_NONE mode), expects 7 fields in the output having "CPU" as first field. Same way, for per-socket, it expects the first field in result to point to socket id. The testcases compares the result with expected count. The values for socket, die, core and cpu are fetched from topology directory: /sys/devices/system/cpu/cpu*/topology. For example, socket value is fetched from "physical_package_id" file of topology directory. (cpu__get_topology_int() in util/cpumap.c) If a platform fails to fetch the topology information, values will be set to -1. For example, incase of pSeries platform of powerpc, value for "physical_package_id" is restricted and not exposed. So, -1 will be assigned. Perf code has a checks for valid cpu id in "aggr_printout" (stat-display.c), which displays the fields. So, in cases where topology values not exposed, first field of the output displaying will be empty. This cause the testcase to fail, as it counts number of fields in the output. Incase of -A (AGGR_NONE mode,), testcase expects 7 fields in the output, becos of -1 value obtained from topology files for some, only 6 fields are printed. Hence a testcase failure reported due to mismatch in number of fields in the output. Patch here adds a sanity check in the testcase for topology. Check will help to skip the test if -1 value found. Fixes: 0c343af ("perf test: JSON format checking") Reported-by: Disha Goel <[email protected]> Suggested-by: Ian Rogers <[email protected]> Suggested-by: James Clark <[email protected]> Signed-off-by: Athira Jajeev <[email protected]> Cc: Claire Jensen <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Kajol Jain <[email protected]> Cc: [email protected] Cc: Madhavan Srinivasan <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Nageswara R Sastry <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent cd400f6 commit 58d4802

File tree

1 file changed

+39
-4
lines changed

1 file changed

+39
-4
lines changed

tools/perf/tests/shell/stat+json_output.sh

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
set -e
88

9+
skip_test=0
10+
911
pythonchecker=$(dirname $0)/lib/perf_json_output_lint.py
1012
if [ "x$PYTHON" == "x" ]
1113
then
@@ -134,14 +136,47 @@ check_per_socket()
134136
echo "[Success]"
135137
}
136138

139+
# The perf stat options for per-socket, per-core, per-die
140+
# and -A ( no_aggr mode ) uses the info fetched from this
141+
# directory: "/sys/devices/system/cpu/cpu*/topology". For
142+
# example, socket value is fetched from "physical_package_id"
143+
# file in topology directory.
144+
# Reference: cpu__get_topology_int in util/cpumap.c
145+
# If the platform doesn't expose topology information, values
146+
# will be set to -1. For example, incase of pSeries platform
147+
# of powerpc, value for "physical_package_id" is restricted
148+
# and set to -1. Check here validates the socket-id read from
149+
# topology file before proceeding further
150+
151+
FILE_LOC="/sys/devices/system/cpu/cpu*/topology/"
152+
FILE_NAME="physical_package_id"
153+
154+
check_for_topology()
155+
{
156+
if ! ParanoidAndNotRoot 0
157+
then
158+
socket_file=`ls $FILE_LOC/$FILE_NAME | head -n 1`
159+
[ -z $socket_file ] && return 0
160+
socket_id=`cat $socket_file`
161+
[ $socket_id == -1 ] && skip_test=1
162+
return 0
163+
fi
164+
}
165+
166+
check_for_topology
137167
check_no_args
138168
check_system_wide
139-
check_system_wide_no_aggr
140169
check_interval
141170
check_event
142-
check_per_core
143171
check_per_thread
144-
check_per_die
145172
check_per_node
146-
check_per_socket
173+
if [ $skip_test -ne 1 ]
174+
then
175+
check_system_wide_no_aggr
176+
check_per_core
177+
check_per_die
178+
check_per_socket
179+
else
180+
echo "[Skip] Skipping tests for system_wide_no_aggr, per_core, per_die and per_socket since socket id exposed via topology is invalid"
181+
fi
147182
exit 0

0 commit comments

Comments
 (0)