Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# test Intel TPEBS counting mode (exclusive)
3# SPDX-License-Identifier: GPL-2.0
4
5set -e
6
7ParanoidAndNotRoot() {
8 [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
9}
10
11if ! grep -q GenuineIntel /proc/cpuinfo
12then
13 echo "Skipping non-Intel"
14 exit 2
15fi
16
17if ParanoidAndNotRoot 0
18then
19 echo "Skipping paranoid >0 and not root"
20 exit 2
21fi
22
23stat_output=$(mktemp /tmp/__perf_stat_tpebs_output.XXXXX)
24
25cleanup() {
26 rm -rf "${stat_output}"
27 trap - EXIT TERM INT
28}
29
30trap_cleanup() {
31 echo "Unexpected signal in ${FUNCNAME[1]}"
32 cat "${stat_output}"
33 cleanup
34 exit 1
35}
36trap trap_cleanup EXIT TERM INT
37
38# Event to be used in tests
39event=cache-misses
40
41if ! perf record -e "${event}:p" -a -o /dev/null sleep 0.01 > "${stat_output}" 2>&1
42then
43 echo "Missing ${event} support"
44 cleanup
45 exit 2
46fi
47
48test_with_record_tpebs() {
49 echo "Testing with --record-tpebs"
50 if ! perf stat -e "${event}:R" --record-tpebs -a sleep 0.01 > "${stat_output}" 2>&1
51 then
52 echo "Testing with --record-tpebs [Failed perf stat]"
53 cat "${stat_output}"
54 exit 1
55 fi
56
57 # Expected output:
58 # $ perf stat --record-tpebs -e cache-misses:R -a sleep 0.01
59 # Events enabled
60 # [ perf record: Woken up 2 times to write data ]
61 # [ perf record: Captured and wrote 0.056 MB - ]
62 #
63 # Performance counter stats for 'system wide':
64 #
65 # 0 cache-misses:R
66 #
67 # 0.013963299 seconds time elapsed
68 if ! grep "perf record" "${stat_output}"
69 then
70 echo "Testing with --record-tpebs [Failed missing perf record]"
71 cat "${stat_output}"
72 exit 1
73 fi
74 if ! grep "${event}:R" "${stat_output}" && ! grep "/${event}/R" "${stat_output}"
75 then
76 echo "Testing with --record-tpebs [Failed missing event name]"
77 cat "${stat_output}"
78 exit 1
79 fi
80 echo "Testing with --record-tpebs [Success]"
81}
82
83test_with_record_tpebs
84cleanup
85exit 0