Messages in this thread | | | From | Ian Rogers <> | Date | Tue, 15 Aug 2023 01:17:55 -0700 | Subject | Re: [PATCH 2/2] perf test: Add perf record sample filtering test |
| |
On Thu, Aug 10, 2023 at 7:58 PM Namhyung Kim <namhyung@kernel.org> wrote: > > $ sudo ./perf test 'sample filter' -v > 94: perf record sample filtering (by BPF) tests : > --- start --- > test child forked, pid 3817527 > Checking BPF-filter privilege > Basic bpf-filter test > Basic bpf-filter test [Success] > Failing bpf-filter test > Error: task-clock event does not have PERF_SAMPLE_CPU > Failing bpf-filter test [Success] > Group bpf-filter test > Error: task-clock event does not have PERF_SAMPLE_CPU > Error: task-clock event does not have PERF_SAMPLE_CODE_PAGE_SIZE > Group bpf-filter test [Success] > test child finished with 0 > ---- end ---- > perf record sample filtering (by BPF) tests: Ok > > Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: Ian Rogers <irogers@google.com>
Thanks, Ian
> --- > tools/perf/tests/shell/record_bpf_filter.sh | 128 ++++++++++++++++++++ > 1 file changed, 128 insertions(+) > create mode 100755 tools/perf/tests/shell/record_bpf_filter.sh > > diff --git a/tools/perf/tests/shell/record_bpf_filter.sh b/tools/perf/tests/shell/record_bpf_filter.sh > new file mode 100755 > index 000000000000..e76ea861b92c > --- /dev/null > +++ b/tools/perf/tests/shell/record_bpf_filter.sh > @@ -0,0 +1,128 @@ > +#!/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 > + 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 > -- > 2.41.0.640.ga95def55d0-goog >
| |