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