Loading...
Note: File does not exist in v4.6.
1#!/bin/sh
2# perf record offcpu profiling tests (exclusive)
3# SPDX-License-Identifier: GPL-2.0
4
5set -e
6
7err=0
8perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
9
10cleanup() {
11 rm -f ${perfdata}
12 rm -f ${perfdata}.old
13 trap - EXIT TERM INT
14}
15
16trap_cleanup() {
17 cleanup
18 exit 1
19}
20trap trap_cleanup EXIT TERM INT
21
22test_offcpu_priv() {
23 echo "Checking off-cpu privilege"
24
25 if [ "$(id -u)" != 0 ]
26 then
27 echo "off-cpu test [Skipped permission]"
28 err=2
29 return
30 fi
31 if perf version --build-options 2>&1 | grep HAVE_BPF_SKEL | grep -q OFF
32 then
33 echo "off-cpu test [Skipped missing BPF support]"
34 err=2
35 return
36 fi
37}
38
39test_offcpu_basic() {
40 echo "Basic off-cpu test"
41
42 if ! perf record --off-cpu -e dummy -o ${perfdata} sleep 1 2> /dev/null
43 then
44 echo "Basic off-cpu test [Failed record]"
45 err=1
46 return
47 fi
48 if ! perf evlist -i ${perfdata} | grep -q "offcpu-time"
49 then
50 echo "Basic off-cpu test [Failed no event]"
51 err=1
52 return
53 fi
54 if ! perf report -i ${perfdata} -q --percent-limit=90 | grep -E -q sleep
55 then
56 echo "Basic off-cpu test [Failed missing output]"
57 err=1
58 return
59 fi
60 echo "Basic off-cpu test [Success]"
61}
62
63test_offcpu_child() {
64 echo "Child task off-cpu test"
65
66 # perf bench sched messaging creates 400 processes
67 if ! perf record --off-cpu -e dummy -o ${perfdata} -- \
68 perf bench sched messaging -g 10 > /dev/null 2>&1
69 then
70 echo "Child task off-cpu test [Failed record]"
71 err=1
72 return
73 fi
74 if ! perf evlist -i ${perfdata} | grep -q "offcpu-time"
75 then
76 echo "Child task off-cpu test [Failed no event]"
77 err=1
78 return
79 fi
80 # each process waits at least for poll, so it should be more than 400 events
81 if ! perf report -i ${perfdata} -s comm -q -n -t ';' --percent-limit=90 | \
82 awk -F ";" '{ if (NF > 3 && int($3) < 400) exit 1; }'
83 then
84 echo "Child task off-cpu test [Failed invalid output]"
85 err=1
86 return
87 fi
88 echo "Child task off-cpu test [Success]"
89}
90
91
92test_offcpu_priv
93
94if [ $err = 0 ]; then
95 test_offcpu_basic
96fi
97
98if [ $err = 0 ]; then
99 test_offcpu_child
100fi
101
102cleanup
103exit $err