[2/2] perf test: Add perf record sample filtering test

Message ID 20230811025822.3859771-2-namhyung@kernel.org
State New
Headers
Series [1/2] perf bpf-filter: Fix sample flag check with || |

Commit Message

Namhyung Kim Aug. 11, 2023, 2:58 a.m. UTC
  $ 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>
---
 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
  

Comments

Arnaldo Carvalho de Melo Aug. 15, 2023, 5:30 p.m. UTC | #1
Em Thu, Aug 10, 2023 at 07:58:22PM -0700, Namhyung Kim escreveu:
>   $ 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

[root@five ~]# perf test -v "by BPF"
 91: perf record sample filtering (by BPF) tests                     :
--- start ---
test child forked, pid 64165
Checking BPF-filter privilege
Basic bpf-filter test
 ffffffff97f4f688
 ffffffff97f73859
 ffffffff97412ce6
 ffffffff976da215
 ffffffff973a92bf
 ffffffff97376ad7
 ffffffff97f73859
 ffffffff97f7400c
 ffffffff97365116
 ffffffff97f73859
 ffffffff97f5320c
 ffffffff973ea351
 ffffffff97143774
 ffffffff9740f730
 ffffffff9736944f
 ffffffff973e593d
 ffffffff976e36c8
 ffffffffc12cf19b
 ffffffff976c79d5
 ffffffff9737d254
 ffffffff9737d254
 ffffffff9737d254
 ffffffff9737d254
 ffffffff9737d254
 ffffffff9737ca5f
 ffffffff9737d254
 ffffffff9737d254
 ffffffff9737d339
 ffffffff9737dcf3
 ffffffff9737dcf3
 ffffffff9737d254
 ffffffff973e442a
 ffffffff973713b8
 ffffffff973ea561
 ffffffff973712ee
 ffffffff973713b8
 ffffffff973713b8
 ffffffff973e43fa
 ffffffff971fa17e
 ffffffff971fa17e
 ffffffff973ac8ee
 ffffffff97f73859
 ffffffff9741082c
 ffffffff973ea34a
 ffffffff974148c6
 ffffffff974c97d5
 ffffffff97394b51
 ffffffff973916af
 ffffffff9737b5e3
 ffffffff976cf825
 ffffffff9737c58d
 ffffffff9788ab15
 ffffffff9732af89
 ffffffff97096ef3
 ffffffff973e92fd
 ffffffff9730a991
 ffffffff9739e2c5
 ffffffff9731cdc2
 ffffffff97f363c4
 ffffffff97f3915c
 ffffffff97f5d754
 ffffffff9718a181
 ffffffff9709b1a5
 ffffffff973710e4
 ffffffff97f52b27
 ffffffff9738b905
 ffffffff971fdca5
 ffffffff9737dbc4
 ffffffff971b4e04
Basic bpf-filter test [Failed invalid output]
test child finished with -1
---- end ----
perf record sample filtering (by BPF) tests: FAILED!
[root@five ~]#

[root@five ~]# uname -a
Linux five 6.2.15-100.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 11 16:51:53 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@five ~]# 
 
> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>  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
>
  
Arnaldo Carvalho de Melo Aug. 15, 2023, 5:42 p.m. UTC | #2
Em Tue, Aug 15, 2023 at 02:30:18PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Thu, Aug 10, 2023 at 07:58:22PM -0700, Namhyung Kim escreveu:
> >   $ 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
> 
> [root@five ~]# perf test -v "by BPF"
>  91: perf record sample filtering (by BPF) tests                     :
> --- start ---
> test child forked, pid 64165
> Checking BPF-filter privilege
> Basic bpf-filter test
>  ffffffff97f4f688
>  ffffffff97f73859
>  ffffffff97412ce6
>  ffffffff976da215
>  ffffffff973a92bf
>  ffffffff97376ad7
>  ffffffff97f73859
<SNIP
>  ffffffff971fdca5
>  ffffffff9737dbc4
>  ffffffff971b4e04
> Basic bpf-filter test [Failed invalid output]
> test child finished with -1
> ---- end ----
> perf record sample filtering (by BPF) tests: FAILED!
> [root@five ~]#
> 
> [root@five ~]# uname -a
> Linux five 6.2.15-100.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 11 16:51:53 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
> [root@five ~]# 

Above was on a AMD Ryzen 5950X, the following was on a lenovo t480s,
Intel notebook:

[root@quaco ~]# uname -a
Linux quaco 6.4.7-200.fc38.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 27 20:01:18 UTC 2023 x86_64 GNU/Linux
[root@quaco ~]# perf test "filter"
 30: Filter hist entries                                             : Ok
 36: Filter fds with revents mask in a fdarray                       : Ok
 67: dlfilter C API                                                  : Ok
 91: perf record sample filtering (by BPF) tests                     : Ok
[root@quaco ~]# perf test -v "by BPF"
 91: perf record sample filtering (by BPF) tests                     :
--- start ---
test child forked, pid 273609
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
[root@quaco ~]#
  
Namhyung Kim Aug. 23, 2023, 12:50 a.m. UTC | #3
Hi Arnaldo,

On Tue, Aug 15, 2023 at 10:42 AM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
>
> Em Tue, Aug 15, 2023 at 02:30:18PM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Thu, Aug 10, 2023 at 07:58:22PM -0700, Namhyung Kim escreveu:
> > >   $ 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
> >
> > [root@five ~]# perf test -v "by BPF"
> >  91: perf record sample filtering (by BPF) tests                     :
> > --- start ---
> > test child forked, pid 64165
> > Checking BPF-filter privilege
> > Basic bpf-filter test
> >  ffffffff97f4f688
> >  ffffffff97f73859
> >  ffffffff97412ce6
> >  ffffffff976da215
> >  ffffffff973a92bf
> >  ffffffff97376ad7
> >  ffffffff97f73859
> <SNIP
> >  ffffffff971fdca5
> >  ffffffff9737dbc4
> >  ffffffff971b4e04
> > Basic bpf-filter test [Failed invalid output]
> > test child finished with -1
> > ---- end ----
> > perf record sample filtering (by BPF) tests: FAILED!
> > [root@five ~]#
> >
> > [root@five ~]# uname -a
> > Linux five 6.2.15-100.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 11 16:51:53 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
> > [root@five ~]#
>
> Above was on a AMD Ryzen 5950X, the following was on a lenovo t480s,
> Intel notebook:

Thanks for the test.  I think it's a matter of the kernel version
rather than the CPU vendor.  6.1 or before will fail the check
in the beginning but 6.2 kernel lacks a feature to set sample
flags for some fields and silently accept all samples.  IIRC it's
added in v6.3.

Probably I need to add a version check in the error path.

Thanks,
Namhyung

>
> [root@quaco ~]# uname -a
> Linux quaco 6.4.7-200.fc38.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 27 20:01:18 UTC 2023 x86_64 GNU/Linux
> [root@quaco ~]# perf test "filter"
>  30: Filter hist entries                                             : Ok
>  36: Filter fds with revents mask in a fdarray                       : Ok
>  67: dlfilter C API                                                  : Ok
>  91: perf record sample filtering (by BPF) tests                     : Ok
> [root@quaco ~]# perf test -v "by BPF"
>  91: perf record sample filtering (by BPF) tests                     :
> --- start ---
> test child forked, pid 273609
> 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
> [root@quaco ~]#
  
Arnaldo Carvalho de Melo Aug. 23, 2023, 11:34 a.m. UTC | #4
Em Tue, Aug 22, 2023 at 05:50:26PM -0700, Namhyung Kim escreveu:
> Hi Arnaldo,
> 
> On Tue, Aug 15, 2023 at 10:42 AM Arnaldo Carvalho de Melo
> <acme@kernel.org> wrote:
> >
> > Em Tue, Aug 15, 2023 at 02:30:18PM -0300, Arnaldo Carvalho de Melo escreveu:
> > > Em Thu, Aug 10, 2023 at 07:58:22PM -0700, Namhyung Kim escreveu:
> > > >   $ 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
> > >
> > > [root@five ~]# perf test -v "by BPF"
> > >  91: perf record sample filtering (by BPF) tests                     :
> > > --- start ---
> > > test child forked, pid 64165
> > > Checking BPF-filter privilege
> > > Basic bpf-filter test
> > >  ffffffff97f4f688
> > >  ffffffff97f73859
> > >  ffffffff97412ce6
> > >  ffffffff976da215
> > >  ffffffff973a92bf
> > >  ffffffff97376ad7
> > >  ffffffff97f73859
> > <SNIP
> > >  ffffffff971fdca5
> > >  ffffffff9737dbc4
> > >  ffffffff971b4e04
> > > Basic bpf-filter test [Failed invalid output]
> > > test child finished with -1
> > > ---- end ----
> > > perf record sample filtering (by BPF) tests: FAILED!
> > > [root@five ~]#
> > >
> > > [root@five ~]# uname -a
> > > Linux five 6.2.15-100.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 11 16:51:53 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
> > > [root@five ~]#
> >
> > Above was on a AMD Ryzen 5950X, the following was on a lenovo t480s,
> > Intel notebook:
> 
> Thanks for the test.  I think it's a matter of the kernel version
> rather than the CPU vendor.  6.1 or before will fail the check
> in the beginning but 6.2 kernel lacks a feature to set sample
> flags for some fields and silently accept all samples.  IIRC it's
> added in v6.3.
> 
> Probably I need to add a version check in the error path.

Yeah, we need to do a wider testing of all things enabled
BUILD_BPF_SKEL=1, in more kernels, architectures, distributions.

Thanks for the feedback,

- Arnaldo

 
> Thanks,
> Namhyung
> 
> >
> > [root@quaco ~]# uname -a
> > Linux quaco 6.4.7-200.fc38.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 27 20:01:18 UTC 2023 x86_64 GNU/Linux
> > [root@quaco ~]# perf test "filter"
> >  30: Filter hist entries                                             : Ok
> >  36: Filter fds with revents mask in a fdarray                       : Ok
> >  67: dlfilter C API                                                  : Ok
> >  91: perf record sample filtering (by BPF) tests                     : Ok
> > [root@quaco ~]# perf test -v "by BPF"
> >  91: perf record sample filtering (by BPF) tests                     :
> > --- start ---
> > test child forked, pid 273609
> > 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
> > [root@quaco ~]#
  

Patch

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