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 <irogers@google.com>
Cc: Colin Ian King <colin.i.king@gmail.com>
Cc: Athira Jajeev <atrajeev@linux.vnet.ibm.com>
Link: https://lore.kernel.org/r/20240925173013.12789-1-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
Ian Rogers 2024-09-25 10:30:13 -07:00 committed by Namhyung Kim
parent 77b004f4c5
commit 7e73ea4029

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