perf test cs-etm: Replace unroll loop thread with deterministic decode test

Testing a long sequence without branches seems like it would be better
as a decoder unit test, and this test doesn't test decoding either, so
it's not clear what bugs this is trying to catch.

The new deterministic workload has somewhat long sequences when built
unoptimized, and we can always increase them later if we want to. But
now we test that decoding always gives the same result for the same
sequence of code which we've never had before.

Signed-off-by: James Clark <james.clark@linaro.org>
Tested-by: Leo Yan <leo.yan@arm.com>
Cc: Amir Ayupov <aaupov@meta.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Mike Leach <mike.leach@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paschalis Mpeis <Paschalis.Mpeis@arm.com>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
James Clark 2026-06-09 15:40:11 +01:00 committed by Arnaldo Carvalho de Melo
parent 3fdf30607e
commit ccf62a267a
2 changed files with 72 additions and 22 deletions

View File

@ -0,0 +1,72 @@
#!/bin/bash -e
# CoreSight deterministic workload decode (exclusive)
# SPDX-License-Identifier: GPL-2.0
# If CoreSight is not available, skip the test
perf list pmu | grep -q cs_etm || exit 2
tmpdir=$(mktemp -d /tmp/__perf_test.coresight_deterministic.XXXXX)
cleanup() {
rm -rf "${tmpdir}"
trap - EXIT TERM INT
}
trap_cleanup() {
cleanup
exit 1
}
trap trap_cleanup EXIT TERM INT
cf="$tmpdir/ctl"
af="$tmpdir/ack"
mkfifo "$cf" "$af"
# Start disabled and use the control FIFO to only record the workload and not
# startup.
perf record -o "$tmpdir/data" -e cs_etm//u -D -1 --control fifo:"$cf","$af" -- \
perf test --record-ctl fifo:"$cf","$af" -w deterministic > /dev/null 2>&1
perf script -i "$tmpdir/data" --itrace=i1i -F ip,srcline | \
grep "deterministic.c" | uniq > "$tmpdir/script" 2>/dev/null
# Remove brace lines and call sites as they may not be hit or may have
# extra hits after returning, depending on the compiler.
sed -i \
-e '/deterministic.c:8$/d' \
-e '/deterministic.c:12$/d' \
-e '/deterministic.c:15$/d' \
-e '/deterministic.c:19$/d' \
-e '/deterministic.c:23$/d' \
-e '/deterministic.c:28$/d' \
-e '/deterministic.c:34$/d' \
-e '/deterministic.c:36$/d' \
-e '/deterministic.c:37$/d' \
"$tmpdir/script"
cat > "$tmpdir/expected" << EOF
deterministic.c:24
deterministic.c:25
deterministic.c:26
deterministic.c:9
deterministic.c:10
deterministic.c:11
deterministic.c:30
deterministic.c:31
deterministic.c:32
deterministic.c:16
deterministic.c:17
deterministic.c:18
EOF
if ! diff -q "$tmpdir/script" "$tmpdir/expected"; then
echo "FAIL: line numbers don't match expected: "
head -n 100 "$tmpdir/script"
cleanup
exit 1
fi
cleanup
exit 0

View File

@ -1,22 +0,0 @@
#!/bin/bash -e
# CoreSight / Unroll Loop Thread 10 (exclusive)
# SPDX-License-Identifier: GPL-2.0
# Carsten Haitzler <carsten.haitzler@arm.com>, 2021
TEST="unroll_loop_thread"
# shellcheck source=../lib/coresight.sh
. "$(dirname $0)"/../lib/coresight.sh
ARGS="10"
DATV="10"
# shellcheck disable=SC2153
DATA="$DATD/perf-$TEST-$DATV.data"
perf record $PERFRECOPT -o "$DATA" "$BIN" $ARGS
perf_dump_aux_verify "$DATA" 10 10 10
err=$?
exit $err