| #!/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 |