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