86 lines
1.8 KiB
Bash
Executable File
86 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# test Intel TPEBS counting mode (exclusive)
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
set -e
|
|
|
|
ParanoidAndNotRoot() {
|
|
[ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
|
|
}
|
|
|
|
if ! grep -q GenuineIntel /proc/cpuinfo
|
|
then
|
|
echo "Skipping non-Intel"
|
|
exit 2
|
|
fi
|
|
|
|
if ParanoidAndNotRoot 0
|
|
then
|
|
echo "Skipping paranoid >0 and not root"
|
|
exit 2
|
|
fi
|
|
|
|
stat_output=$(mktemp /tmp/__perf_stat_tpebs_output.XXXXX)
|
|
|
|
cleanup() {
|
|
rm -rf "${stat_output}"
|
|
trap - EXIT TERM INT
|
|
}
|
|
|
|
trap_cleanup() {
|
|
echo "Unexpected signal in ${FUNCNAME[1]}"
|
|
cat "${stat_output}"
|
|
cleanup
|
|
exit 1
|
|
}
|
|
trap trap_cleanup EXIT TERM INT
|
|
|
|
# Event to be used in tests
|
|
event=cache-misses
|
|
|
|
if ! perf record -e "${event}:p" -a -o /dev/null sleep 0.01 > "${stat_output}" 2>&1
|
|
then
|
|
echo "Missing ${event} support"
|
|
cleanup
|
|
exit 2
|
|
fi
|
|
|
|
test_with_record_tpebs() {
|
|
echo "Testing with --record-tpebs"
|
|
if ! perf stat -e "${event}:R" --record-tpebs -a sleep 0.01 > "${stat_output}" 2>&1
|
|
then
|
|
echo "Testing with --record-tpebs [Failed perf stat]"
|
|
cat "${stat_output}"
|
|
exit 1
|
|
fi
|
|
|
|
# Expected output:
|
|
# $ perf stat --record-tpebs -e cache-misses:R -a sleep 0.01
|
|
# Events enabled
|
|
# [ perf record: Woken up 2 times to write data ]
|
|
# [ perf record: Captured and wrote 0.056 MB - ]
|
|
#
|
|
# Performance counter stats for 'system wide':
|
|
#
|
|
# 0 cache-misses:R
|
|
#
|
|
# 0.013963299 seconds time elapsed
|
|
if ! grep "perf record" "${stat_output}"
|
|
then
|
|
echo "Testing with --record-tpebs [Failed missing perf record]"
|
|
cat "${stat_output}"
|
|
exit 1
|
|
fi
|
|
if ! grep "${event}:R" "${stat_output}" && ! grep "/${event}/R" "${stat_output}"
|
|
then
|
|
echo "Testing with --record-tpebs [Failed missing event name]"
|
|
cat "${stat_output}"
|
|
exit 1
|
|
fi
|
|
echo "Testing with --record-tpebs [Success]"
|
|
}
|
|
|
|
test_with_record_tpebs
|
|
cleanup
|
|
exit 0
|