blob: 31c593966e8cf6a6209f4916529e28e2f1d31e15 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/bin/sh
# perf record sample filtering (by BPF) tests
# SPDX-License-Identifier: GPL-2.0
set -e
err=0
perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
cleanup() {
rm -f "${perfdata}"
rm -f "${perfdata}".old
trap - EXIT TERM INT
}
trap_cleanup() {
cleanup
exit 1
}
trap trap_cleanup EXIT TERM INT
test_bpf_filter_priv() {
echo "Checking BPF-filter privilege"
if [ "$(id -u)" != 0 ]
then
echo "bpf-filter test [Skipped permission]"
err=2
return
fi
if ! perf record -e task-clock --filter 'period > 1' \
-o /dev/null --quiet true 2>&1
then
echo "bpf-filter test [Skipped missing BPF support]"
err=2
return
fi
}
test_bpf_filter_basic() {
echo "Basic bpf-filter test"
if ! perf record -e task-clock -c 10000 --filter 'ip < 0xffffffff00000000' \
-o "${perfdata}" true 2> /dev/null
then
echo "Basic bpf-filter test [Failed record]"
err=1
return
fi
if perf script -i "${perfdata}" -F ip | grep 'ffffffff[0-9a-f]*'
then
if uname -r | grep -q ^6.2
then
echo "Basic bpf-filter test [Skipped unsupported kernel]"
err=2
return
fi
echo "Basic bpf-filter test [Failed invalid output]"
err=1
return
fi
echo "Basic bpf-filter test [Success]"
}
test_bpf_filter_fail() {
echo "Failing bpf-filter test"
# 'cpu' requires PERF_SAMPLE_CPU flag
if ! perf record -e task-clock --filter 'cpu > 0' \
-o /dev/null true 2>&1 | grep PERF_SAMPLE_CPU
then
echo "Failing bpf-filter test [Failed forbidden CPU]"
err=1
return
fi
if ! perf record --sample-cpu -e task-clock --filter 'cpu > 0' \
-o /dev/null true 2>/dev/null
then
echo "Failing bpf-filter test [Failed should succeed]"
err=1
return
fi
echo "Failing bpf-filter test [Success]"
}
test_bpf_filter_group() {
echo "Group bpf-filter test"
if ! perf record -e task-clock --filter 'period > 1000 || ip > 0' \
-o /dev/null true 2>/dev/null
then
echo "Group bpf-filter test [Failed should succeed]"
err=1
return
fi
if ! perf record -e task-clock --filter 'cpu > 0 || ip > 0' \
-o /dev/null true 2>&1 | grep PERF_SAMPLE_CPU
then
echo "Group bpf-filter test [Failed forbidden CPU]"
err=1
return
fi
if ! perf record -e task-clock --filter 'period > 0 || code_pgsz > 4096' \
-o /dev/null true 2>&1 | grep PERF_SAMPLE_CODE_PAGE_SIZE
then
echo "Group bpf-filter test [Failed forbidden CODE_PAGE_SIZE]"
err=1
return
fi
echo "Group bpf-filter test [Success]"
}
test_bpf_filter_priv
if [ $err = 0 ]; then
test_bpf_filter_basic
fi
if [ $err = 0 ]; then
test_bpf_filter_fail
fi
if [ $err = 0 ]; then
test_bpf_filter_group
fi
cleanup
exit $err
|