19575ecddSNamhyung Kim#!/bin/sh 29575ecddSNamhyung Kim# perf record sample filtering (by BPF) tests 39575ecddSNamhyung Kim# SPDX-License-Identifier: GPL-2.0 49575ecddSNamhyung Kim 59575ecddSNamhyung Kimset -e 69575ecddSNamhyung Kim 79575ecddSNamhyung Kimerr=0 89575ecddSNamhyung Kimperfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX) 99575ecddSNamhyung Kim 109575ecddSNamhyung Kimcleanup() { 119575ecddSNamhyung Kim rm -f "${perfdata}" 129575ecddSNamhyung Kim rm -f "${perfdata}".old 139575ecddSNamhyung Kim trap - EXIT TERM INT 149575ecddSNamhyung Kim} 159575ecddSNamhyung Kim 169575ecddSNamhyung Kimtrap_cleanup() { 179575ecddSNamhyung Kim cleanup 189575ecddSNamhyung Kim exit 1 199575ecddSNamhyung Kim} 209575ecddSNamhyung Kimtrap trap_cleanup EXIT TERM INT 219575ecddSNamhyung Kim 229575ecddSNamhyung Kimtest_bpf_filter_priv() { 239575ecddSNamhyung Kim echo "Checking BPF-filter privilege" 249575ecddSNamhyung Kim 259575ecddSNamhyung Kim if [ "$(id -u)" != 0 ] 269575ecddSNamhyung Kim then 279575ecddSNamhyung Kim echo "bpf-filter test [Skipped permission]" 289575ecddSNamhyung Kim err=2 299575ecddSNamhyung Kim return 309575ecddSNamhyung Kim fi 319575ecddSNamhyung Kim if ! perf record -e task-clock --filter 'period > 1' \ 329575ecddSNamhyung Kim -o /dev/null --quiet true 2>&1 339575ecddSNamhyung Kim then 349575ecddSNamhyung Kim echo "bpf-filter test [Skipped missing BPF support]" 359575ecddSNamhyung Kim err=2 369575ecddSNamhyung Kim return 379575ecddSNamhyung Kim fi 389575ecddSNamhyung Kim} 399575ecddSNamhyung Kim 409575ecddSNamhyung Kimtest_bpf_filter_basic() { 419575ecddSNamhyung Kim echo "Basic bpf-filter test" 429575ecddSNamhyung Kim 439575ecddSNamhyung Kim if ! perf record -e task-clock -c 10000 --filter 'ip < 0xffffffff00000000' \ 449575ecddSNamhyung Kim -o "${perfdata}" true 2> /dev/null 459575ecddSNamhyung Kim then 469575ecddSNamhyung Kim echo "Basic bpf-filter test [Failed record]" 479575ecddSNamhyung Kim err=1 489575ecddSNamhyung Kim return 499575ecddSNamhyung Kim fi 509575ecddSNamhyung Kim if perf script -i "${perfdata}" -F ip | grep 'ffffffff[0-9a-f]*' 519575ecddSNamhyung Kim then 52*11f5710dSNamhyung Kim if uname -r | grep -q ^6.2 53*11f5710dSNamhyung Kim then 54*11f5710dSNamhyung Kim echo "Basic bpf-filter test [Skipped unsupported kernel]" 55*11f5710dSNamhyung Kim err=2 56*11f5710dSNamhyung Kim return 57*11f5710dSNamhyung Kim fi 589575ecddSNamhyung Kim echo "Basic bpf-filter test [Failed invalid output]" 599575ecddSNamhyung Kim err=1 609575ecddSNamhyung Kim return 619575ecddSNamhyung Kim fi 629575ecddSNamhyung Kim echo "Basic bpf-filter test [Success]" 639575ecddSNamhyung Kim} 649575ecddSNamhyung Kim 659575ecddSNamhyung Kimtest_bpf_filter_fail() { 669575ecddSNamhyung Kim echo "Failing bpf-filter test" 679575ecddSNamhyung Kim 689575ecddSNamhyung Kim # 'cpu' requires PERF_SAMPLE_CPU flag 699575ecddSNamhyung Kim if ! perf record -e task-clock --filter 'cpu > 0' \ 709575ecddSNamhyung Kim -o /dev/null true 2>&1 | grep PERF_SAMPLE_CPU 719575ecddSNamhyung Kim then 729575ecddSNamhyung Kim echo "Failing bpf-filter test [Failed forbidden CPU]" 739575ecddSNamhyung Kim err=1 749575ecddSNamhyung Kim return 759575ecddSNamhyung Kim fi 769575ecddSNamhyung Kim 779575ecddSNamhyung Kim if ! perf record --sample-cpu -e task-clock --filter 'cpu > 0' \ 789575ecddSNamhyung Kim -o /dev/null true 2>/dev/null 799575ecddSNamhyung Kim then 809575ecddSNamhyung Kim echo "Failing bpf-filter test [Failed should succeed]" 819575ecddSNamhyung Kim err=1 829575ecddSNamhyung Kim return 839575ecddSNamhyung Kim fi 849575ecddSNamhyung Kim 859575ecddSNamhyung Kim echo "Failing bpf-filter test [Success]" 869575ecddSNamhyung Kim} 879575ecddSNamhyung Kim 889575ecddSNamhyung Kimtest_bpf_filter_group() { 899575ecddSNamhyung Kim echo "Group bpf-filter test" 909575ecddSNamhyung Kim 919575ecddSNamhyung Kim if ! perf record -e task-clock --filter 'period > 1000 || ip > 0' \ 929575ecddSNamhyung Kim -o /dev/null true 2>/dev/null 939575ecddSNamhyung Kim then 949575ecddSNamhyung Kim echo "Group bpf-filter test [Failed should succeed]" 959575ecddSNamhyung Kim err=1 969575ecddSNamhyung Kim return 979575ecddSNamhyung Kim fi 989575ecddSNamhyung Kim 999575ecddSNamhyung Kim if ! perf record -e task-clock --filter 'cpu > 0 || ip > 0' \ 1009575ecddSNamhyung Kim -o /dev/null true 2>&1 | grep PERF_SAMPLE_CPU 1019575ecddSNamhyung Kim then 1029575ecddSNamhyung Kim echo "Group bpf-filter test [Failed forbidden CPU]" 1039575ecddSNamhyung Kim err=1 1049575ecddSNamhyung Kim return 1059575ecddSNamhyung Kim fi 1069575ecddSNamhyung Kim 1079575ecddSNamhyung Kim if ! perf record -e task-clock --filter 'period > 0 || code_pgsz > 4096' \ 1089575ecddSNamhyung Kim -o /dev/null true 2>&1 | grep PERF_SAMPLE_CODE_PAGE_SIZE 1099575ecddSNamhyung Kim then 1109575ecddSNamhyung Kim echo "Group bpf-filter test [Failed forbidden CODE_PAGE_SIZE]" 1119575ecddSNamhyung Kim err=1 1129575ecddSNamhyung Kim return 1139575ecddSNamhyung Kim fi 1149575ecddSNamhyung Kim 1159575ecddSNamhyung Kim echo "Group bpf-filter test [Success]" 1169575ecddSNamhyung Kim} 1179575ecddSNamhyung Kim 1189575ecddSNamhyung Kim 1199575ecddSNamhyung Kimtest_bpf_filter_priv 1209575ecddSNamhyung Kim 1219575ecddSNamhyung Kimif [ $err = 0 ]; then 1229575ecddSNamhyung Kim test_bpf_filter_basic 1239575ecddSNamhyung Kimfi 1249575ecddSNamhyung Kim 1259575ecddSNamhyung Kimif [ $err = 0 ]; then 1269575ecddSNamhyung Kim test_bpf_filter_fail 1279575ecddSNamhyung Kimfi 1289575ecddSNamhyung Kim 1299575ecddSNamhyung Kimif [ $err = 0 ]; then 1309575ecddSNamhyung Kim test_bpf_filter_group 1319575ecddSNamhyung Kimfi 1329575ecddSNamhyung Kim 1339575ecddSNamhyung Kimcleanup 1349575ecddSNamhyung Kimexit $err 135