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