Loading...
Note: File does not exist in v5.4.
1#!/bin/sh
2# perf record tests
3# SPDX-License-Identifier: GPL-2.0
4
5set -e
6
7shelldir=$(dirname "$0")
8. "${shelldir}"/lib/waiting.sh
9
10err=0
11perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
12testprog="perf test -w thloop"
13testsym="test_loop"
14
15cleanup() {
16 rm -rf "${perfdata}"
17 rm -rf "${perfdata}".old
18
19 trap - EXIT TERM INT
20}
21
22trap_cleanup() {
23 cleanup
24 exit 1
25}
26trap trap_cleanup EXIT TERM INT
27
28test_per_thread() {
29 echo "Basic --per-thread mode test"
30 if ! perf record -o /dev/null --quiet ${testprog} 2> /dev/null
31 then
32 echo "Per-thread record [Skipped event not supported]"
33 return
34 fi
35 if ! perf record --per-thread -o "${perfdata}" ${testprog} 2> /dev/null
36 then
37 echo "Per-thread record [Failed record]"
38 err=1
39 return
40 fi
41 if ! perf report -i "${perfdata}" -q | grep -q "${testsym}"
42 then
43 echo "Per-thread record [Failed missing output]"
44 err=1
45 return
46 fi
47
48 # run the test program in background (for 30 seconds)
49 ${testprog} 30 &
50 TESTPID=$!
51
52 rm -f "${perfdata}"
53
54 wait_for_threads ${TESTPID} 2
55 perf record -p "${TESTPID}" --per-thread -o "${perfdata}" sleep 1 2> /dev/null
56 kill ${TESTPID}
57
58 if [ ! -e "${perfdata}" ]
59 then
60 echo "Per-thread record [Failed record -p]"
61 err=1
62 return
63 fi
64 if ! perf report -i "${perfdata}" -q | grep -q "${testsym}"
65 then
66 echo "Per-thread record [Failed -p missing output]"
67 err=1
68 return
69 fi
70
71 echo "Basic --per-thread mode test [Success]"
72}
73
74test_register_capture() {
75 echo "Register capture test"
76 if ! perf list | grep -q 'br_inst_retired.near_call'
77 then
78 echo "Register capture test [Skipped missing event]"
79 return
80 fi
81 if ! perf record --intr-regs=\? 2>&1 | grep -q 'available registers: AX BX CX DX SI DI BP SP IP FLAGS CS SS R8 R9 R10 R11 R12 R13 R14 R15'
82 then
83 echo "Register capture test [Skipped missing registers]"
84 return
85 fi
86 if ! perf record -o - --intr-regs=di,r8,dx,cx -e br_inst_retired.near_call \
87 -c 1000 --per-thread ${testprog} 2> /dev/null \
88 | perf script -F ip,sym,iregs -i - 2> /dev/null \
89 | grep -q "DI:"
90 then
91 echo "Register capture test [Failed missing output]"
92 err=1
93 return
94 fi
95 echo "Register capture test [Success]"
96}
97
98test_system_wide() {
99 echo "Basic --system-wide mode test"
100 if ! perf record -aB --synth=no -o "${perfdata}" ${testprog} 2> /dev/null
101 then
102 echo "System-wide record [Skipped not supported]"
103 return
104 fi
105 if ! perf report -i "${perfdata}" -q | grep -q "${testsym}"
106 then
107 echo "System-wide record [Failed missing output]"
108 err=1
109 return
110 fi
111 if ! perf record -aB --synth=no -e cpu-clock,cs --threads=cpu \
112 -o "${perfdata}" ${testprog} 2> /dev/null
113 then
114 echo "System-wide record [Failed record --threads option]"
115 err=1
116 return
117 fi
118 if ! perf report -i "${perfdata}" -q | grep -q "${testsym}"
119 then
120 echo "System-wide record [Failed --threads missing output]"
121 err=1
122 return
123 fi
124 echo "Basic --system-wide mode test [Success]"
125}
126
127test_workload() {
128 echo "Basic target workload test"
129 if ! perf record -o "${perfdata}" ${testprog} 2> /dev/null
130 then
131 echo "Workload record [Failed record]"
132 err=1
133 return
134 fi
135 if ! perf report -i "${perfdata}" -q | grep -q "${testsym}"
136 then
137 echo "Workload record [Failed missing output]"
138 err=1
139 return
140 fi
141 if ! perf record -e cpu-clock,cs --threads=package \
142 -o "${perfdata}" ${testprog} 2> /dev/null
143 then
144 echo "Workload record [Failed record --threads option]"
145 err=1
146 return
147 fi
148 if ! perf report -i "${perfdata}" -q | grep -q "${testsym}"
149 then
150 echo "Workload record [Failed --threads missing output]"
151 err=1
152 return
153 fi
154 echo "Basic target workload test [Success]"
155}
156
157test_per_thread
158test_register_capture
159test_system_wide
160test_workload
161
162cleanup
163exit $err