perf test: Ignore security failures in all PMU test

Refactor code to have some more error diagnosis on traps, etc. and to
do less work on each line. Add an ignore situation for security failures.

Signed-off-by: Ian Rogers <[email protected]>
Cc: Colin Ian King <[email protected]>
Cc: Athira Jajeev <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Namhyung Kim <[email protected]>
This commit is contained in:
Ian Rogers authored and Namhyung Kim committed 2024-09-26 11:17:25 -07:00
1 parent 77b004f4c5
commit 7e73ea4029
1 file changed
+40 -12
+40 -12
View File
@@ -1,23 +1,51 @@
#!/bin/sh
#!/bin/bash
# perf all PMU test
# SPDX-License-Identifier: GPL-2.0
set -e
err=0
result=""
trap_cleanup() {
echo "Unexpected signal in ${FUNCNAME[1]}"
echo "$result"
exit 1
}
trap trap_cleanup EXIT TERM INT
# Test all PMU events; however exclude parameterized ones (name contains '?')
for p in $(perf list --raw-dump pmu | sed 's/[[:graph:]]\+?[[:graph:]]\+[[:space:]]//g'); do
for p in $(perf list --raw-dump pmu | sed 's/[[:graph:]]\+?[[:graph:]]\+[[:space:]]//g')
do
echo "Testing $p"
result=$(perf stat -e "$p" true 2>&1)
if ! echo "$result" | grep -q "$p" && ! echo "$result" | grep -q "<not supported>" ; then
# We failed to see the event and it is supported. Possibly the workload was
# too small so retry with something longer.
result=$(perf stat -e "$p" perf bench internals synthesize 2>&1)
if ! echo "$result" | grep -q "$p" ; then
echo "Event '$p' not printed in:"
echo "$result"
exit 1
fi
if echo "$result" | grep -q "$p"
then
# Event seen in output.
continue
fi
if echo "$result" | grep -q "<not supported>"
then
# Event not supported, so ignore.
continue
fi
if echo "$result" | grep -q "Access to performance monitoring and observability operations is limited."
then
# Access is limited, so ignore.
continue
fi
# We failed to see the event and it is supported. Possibly the workload was
# too small so retry with something longer.
result=$(perf stat -e "$p" perf bench internals synthesize 2>&1)
if echo "$result" | grep -q "$p"
then
# Event seen in output.
continue
fi
echo "Error: event '$p' not printed in:"
echo "$result"
err=1
done
exit 0
trap - EXIT TERM INT
exit $err