mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
perf tests top: Add basic perf top coverage test
The test starts a backgroup thloop workload and monitors it using cpu-clock ensuring test_loop appears in the output. Signed-off-by: Ian Rogers <irogers@google.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
74
tools/perf/tests/shell/top.sh
Executable file
74
tools/perf/tests/shell/top.sh
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
# perf top tests
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
set -e
|
||||
|
||||
err=0
|
||||
log_file=$(mktemp /tmp/perf.top.log.XXXXX)
|
||||
|
||||
cleanup() {
|
||||
rm -f "${log_file}"
|
||||
trap - EXIT TERM INT
|
||||
}
|
||||
|
||||
trap_cleanup() {
|
||||
echo "Unexpected signal in ${FUNCNAME[1]}"
|
||||
cleanup
|
||||
exit 1
|
||||
}
|
||||
trap trap_cleanup EXIT TERM INT
|
||||
|
||||
test_basic_perf_top() {
|
||||
echo "Basic perf top test"
|
||||
|
||||
# Start a workload that spins to generate samples
|
||||
# thloop runs for the specified number of seconds
|
||||
perf test -w thloop 20 &
|
||||
PID=$!
|
||||
|
||||
# Allow it to start
|
||||
sleep 0.1
|
||||
|
||||
# Run perf top for 5 seconds, monitoring that PID
|
||||
# Use --stdio to avoid TUI and redirect output
|
||||
# Use -d 1 to avoid flooding output
|
||||
# Use -e cpu-clock to ensure we get samples
|
||||
# Use sleep to keep stdin open but silent, preventing EOF loop or interactive spam
|
||||
if ! sleep 10 | timeout 5s perf top --stdio -d 1 -e cpu-clock -p $PID > "${log_file}" 2>&1; then
|
||||
retval=$?
|
||||
if [ $retval -ne 124 ] && [ $retval -ne 0 ]; then
|
||||
echo "Basic perf top test [Failed: perf top failed to start or run (ret=$retval)]"
|
||||
head -n 50 "${log_file}"
|
||||
kill $PID
|
||||
wait $PID 2>/dev/null || true
|
||||
err=1
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
kill $PID
|
||||
wait $PID 2>/dev/null || true
|
||||
|
||||
# Check for some sample data (percentage)
|
||||
if ! grep -E -q "[0-9]+\.[0-9]+%" "${log_file}"; then
|
||||
echo "Basic perf top test [Failed: no sample percentage found]"
|
||||
head -n 50 "${log_file}"
|
||||
err=1
|
||||
return
|
||||
fi
|
||||
|
||||
# Check for the symbol
|
||||
if ! grep -q "test_loop" "${log_file}"; then
|
||||
echo "Basic perf top test [Failed: test_loop symbol not found]"
|
||||
head -n 50 "${log_file}"
|
||||
err=1
|
||||
return
|
||||
fi
|
||||
|
||||
echo "Basic perf top test [Success]"
|
||||
}
|
||||
|
||||
test_basic_perf_top
|
||||
cleanup
|
||||
exit $err
|
||||
Reference in New Issue
Block a user