mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-20 16:52:28 +00:00
On my system, perf list is very slow to print the whole events. I think there's a performance issue in SDT and uprobes event listing. I noticed this issue while running perf test on x86 but it takes long to check some CoreSight event which should be skipped quickly. Anyway, some test uses perf list to check whether the required event is available before running the test. The perf list command can take an argument to specify event class or (glob) pattern. But glob pattern is only to suppress output for unmatched ones after checking all events. In this case, specifying event class is better to reduce the number of events it checks and to avoid buggy subsystems entirely. No functional changes intended. Reviewed-by: James Clark <james.clark@linaro.org> Reviewed-by: Ian Rogers <irogers@google.com> Cc: German Gomez <german.gomez@arm.com> Cc: Carsten Haitzler <carsten.haitzler@arm.com> Cc: Leo Yan <leo.yan@arm.com> Link: https://lore.kernel.org/r/20241016065654.269994-1-namhyung@kernel.org Signed-off-by: Namhyung Kim <namhyung@kernel.org>
51 lines
1.0 KiB
Bash
Executable File
51 lines
1.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# Check Arm SPE doesn't hang when there are forks
|
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# German Gomez <german.gomez@arm.com>, 2022
|
|
|
|
skip_if_no_arm_spe_event() {
|
|
perf list pmu | grep -E -q 'arm_spe_[0-9]+//' && return 0
|
|
return 2
|
|
}
|
|
|
|
skip_if_no_arm_spe_event || exit 2
|
|
|
|
TEST_PROGRAM="perf test -w sqrtloop 10"
|
|
PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
|
|
PERF_RECORD_LOG=$(mktemp /tmp/__perf_test.log.XXXXX)
|
|
|
|
cleanup_files()
|
|
{
|
|
echo "Cleaning up files..."
|
|
rm -f ${PERF_RECORD_LOG}
|
|
rm -f ${PERF_DATA}
|
|
}
|
|
|
|
trap cleanup_files EXIT TERM INT
|
|
|
|
echo "Recording workload..."
|
|
perf record -o ${PERF_DATA} -e arm_spe/period=65536/ -vvv -- $TEST_PROGRAM > ${PERF_RECORD_LOG} 2>&1 &
|
|
PERFPID=$!
|
|
|
|
# Check if perf hangs by checking the perf-record logs.
|
|
sleep 1
|
|
log0=$(wc -l $PERF_RECORD_LOG)
|
|
echo Log lines = $log0
|
|
sleep 1
|
|
log1=$(wc -l $PERF_RECORD_LOG)
|
|
echo Log lines after 1 second = $log1
|
|
|
|
kill $PERFPID
|
|
wait $PERFPID
|
|
|
|
if [ "$log0" = "$log1" ];
|
|
then
|
|
echo "SPE hang test: FAIL"
|
|
exit 1
|
|
else
|
|
echo "SPE hang test: PASS"
|
|
fi
|
|
|
|
exit 0
|