* [PATCH 1/2] perf bpf-filter: Fix sample flag check with ||
@ 2023-08-11 2:58 Namhyung Kim
2023-08-11 2:58 ` [PATCH 2/2] perf test: Add perf record sample filtering test Namhyung Kim
2023-08-15 8:16 ` [PATCH 1/2] perf bpf-filter: Fix sample flag check with || Ian Rogers
0 siblings, 2 replies; 8+ messages in thread
From: Namhyung Kim @ 2023-08-11 2:58 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Jiri Olsa
Cc: Ian Rogers, Adrian Hunter, Peter Zijlstra, Ingo Molnar, LKML,
linux-perf-users
For logical OR operator, the actual sample_flags are in the 'groups'
list so it needs to check entries in the list instead. Otherwise it
would show the following error message.
$ sudo perf record -a -e cycles:p --filter 'period > 100 || weight > 0' sleep 1
Error: cycles:p event does not have sample flags 0
failed to set filter "BPF" on event cycles:p with 2 (No such file or directory)
Actually it should warn on 'weight' is used without WEIGHT flag.
Error: cycles:p event does not have PERF_SAMPLE_WEIGHT
Hint: please add -W option to perf record
failed to set filter "BPF" on event cycles:p with 2 (No such file or directory)
Fixes: 4310551b76e0 ("perf bpf filter: Show warning for missing sample flags")
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/util/bpf-filter.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/tools/perf/util/bpf-filter.c b/tools/perf/util/bpf-filter.c
index 47f01df658d9..b51544996046 100644
--- a/tools/perf/util/bpf-filter.c
+++ b/tools/perf/util/bpf-filter.c
@@ -62,6 +62,16 @@ static int check_sample_flags(struct evsel *evsel, struct perf_bpf_filter_expr *
if (evsel->core.attr.sample_type & expr->sample_flags)
return 0;
+ if (expr->op == PBF_OP_GROUP_BEGIN) {
+ struct perf_bpf_filter_expr *group;
+
+ list_for_each_entry(group, &expr->groups, list) {
+ if (check_sample_flags(evsel, group) < 0)
+ return -1;
+ }
+ return 0;
+ }
+
info = get_sample_info(expr->sample_flags);
if (info == NULL) {
pr_err("Error: %s event does not have sample flags %lx\n",
--
2.41.0.640.ga95def55d0-goog
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] perf test: Add perf record sample filtering test
2023-08-11 2:58 [PATCH 1/2] perf bpf-filter: Fix sample flag check with || Namhyung Kim
@ 2023-08-11 2:58 ` Namhyung Kim
2023-08-15 8:17 ` Ian Rogers
2023-08-15 17:30 ` Arnaldo Carvalho de Melo
2023-08-15 8:16 ` [PATCH 1/2] perf bpf-filter: Fix sample flag check with || Ian Rogers
1 sibling, 2 replies; 8+ messages in thread
From: Namhyung Kim @ 2023-08-11 2:58 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Jiri Olsa
Cc: Ian Rogers, Adrian Hunter, Peter Zijlstra, Ingo Molnar, LKML,
linux-perf-users, Athira Rajeev
$ 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
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
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] perf bpf-filter: Fix sample flag check with ||
2023-08-11 2:58 [PATCH 1/2] perf bpf-filter: Fix sample flag check with || Namhyung Kim
2023-08-11 2:58 ` [PATCH 2/2] perf test: Add perf record sample filtering test Namhyung Kim
@ 2023-08-15 8:16 ` Ian Rogers
1 sibling, 0 replies; 8+ messages in thread
From: Ian Rogers @ 2023-08-15 8:16 UTC (permalink / raw)
To: Namhyung Kim
Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Adrian Hunter,
Peter Zijlstra, Ingo Molnar, LKML, linux-perf-users
On Thu, Aug 10, 2023 at 7:58 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> For logical OR operator, the actual sample_flags are in the 'groups'
> list so it needs to check entries in the list instead. Otherwise it
> would show the following error message.
>
> $ sudo perf record -a -e cycles:p --filter 'period > 100 || weight > 0' sleep 1
> Error: cycles:p event does not have sample flags 0
> failed to set filter "BPF" on event cycles:p with 2 (No such file or directory)
>
> Actually it should warn on 'weight' is used without WEIGHT flag.
>
> Error: cycles:p event does not have PERF_SAMPLE_WEIGHT
> Hint: please add -W option to perf record
> failed to set filter "BPF" on event cycles:p with 2 (No such file or directory)
>
> Fixes: 4310551b76e0 ("perf bpf filter: Show warning for missing sample flags")
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: Ian Rogers <irogers@google.com>
Thanks,
Ian
> ---
> tools/perf/util/bpf-filter.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/tools/perf/util/bpf-filter.c b/tools/perf/util/bpf-filter.c
> index 47f01df658d9..b51544996046 100644
> --- a/tools/perf/util/bpf-filter.c
> +++ b/tools/perf/util/bpf-filter.c
> @@ -62,6 +62,16 @@ static int check_sample_flags(struct evsel *evsel, struct perf_bpf_filter_expr *
> if (evsel->core.attr.sample_type & expr->sample_flags)
> return 0;
>
> + if (expr->op == PBF_OP_GROUP_BEGIN) {
> + struct perf_bpf_filter_expr *group;
> +
> + list_for_each_entry(group, &expr->groups, list) {
> + if (check_sample_flags(evsel, group) < 0)
> + return -1;
> + }
> + return 0;
> + }
> +
> info = get_sample_info(expr->sample_flags);
> if (info == NULL) {
> pr_err("Error: %s event does not have sample flags %lx\n",
> --
> 2.41.0.640.ga95def55d0-goog
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] perf test: Add perf record sample filtering test
2023-08-11 2:58 ` [PATCH 2/2] perf test: Add perf record sample filtering test Namhyung Kim
@ 2023-08-15 8:17 ` Ian Rogers
2023-08-15 17:30 ` Arnaldo Carvalho de Melo
1 sibling, 0 replies; 8+ messages in thread
From: Ian Rogers @ 2023-08-15 8:17 UTC (permalink / raw)
To: Namhyung Kim
Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Adrian Hunter,
Peter Zijlstra, Ingo Molnar, LKML, linux-perf-users,
Athira Rajeev
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
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] perf test: Add perf record sample filtering test
2023-08-11 2:58 ` [PATCH 2/2] perf test: Add perf record sample filtering test Namhyung Kim
2023-08-15 8:17 ` Ian Rogers
@ 2023-08-15 17:30 ` Arnaldo Carvalho de Melo
2023-08-15 17:42 ` Arnaldo Carvalho de Melo
1 sibling, 1 reply; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2023-08-15 17:30 UTC (permalink / raw)
To: Namhyung Kim
Cc: Jiri Olsa, Ian Rogers, Adrian Hunter, Peter Zijlstra, Ingo Molnar,
LKML, linux-perf-users, Athira Rajeev
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] perf test: Add perf record sample filtering test
2023-08-15 17:30 ` Arnaldo Carvalho de Melo
@ 2023-08-15 17:42 ` Arnaldo Carvalho de Melo
2023-08-23 0:50 ` Namhyung Kim
0 siblings, 1 reply; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2023-08-15 17:42 UTC (permalink / raw)
To: Namhyung Kim
Cc: Jiri Olsa, Ian Rogers, Adrian Hunter, Peter Zijlstra, Ingo Molnar,
LKML, linux-perf-users, Athira Rajeev
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 ~]#
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] perf test: Add perf record sample filtering test
2023-08-15 17:42 ` Arnaldo Carvalho de Melo
@ 2023-08-23 0:50 ` Namhyung Kim
2023-08-23 11:34 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 8+ messages in thread
From: Namhyung Kim @ 2023-08-23 0:50 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Jiri Olsa, Ian Rogers, Adrian Hunter, Peter Zijlstra, Ingo Molnar,
LKML, linux-perf-users, Athira Rajeev
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 ~]#
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] perf test: Add perf record sample filtering test
2023-08-23 0:50 ` Namhyung Kim
@ 2023-08-23 11:34 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2023-08-23 11:34 UTC (permalink / raw)
To: Namhyung Kim
Cc: Jiri Olsa, Ian Rogers, Adrian Hunter, Peter Zijlstra, Ingo Molnar,
LKML, linux-perf-users, Athira Rajeev
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 ~]#
--
- Arnaldo
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-08-23 11:35 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-11 2:58 [PATCH 1/2] perf bpf-filter: Fix sample flag check with || Namhyung Kim
2023-08-11 2:58 ` [PATCH 2/2] perf test: Add perf record sample filtering test Namhyung Kim
2023-08-15 8:17 ` Ian Rogers
2023-08-15 17:30 ` Arnaldo Carvalho de Melo
2023-08-15 17:42 ` Arnaldo Carvalho de Melo
2023-08-23 0:50 ` Namhyung Kim
2023-08-23 11:34 ` Arnaldo Carvalho de Melo
2023-08-15 8:16 ` [PATCH 1/2] perf bpf-filter: Fix sample flag check with || Ian Rogers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).