tools/perf/tests/shell/amd-ibs-swfilt.sh | 67 ++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 tools/perf/tests/shell/amd-ibs-swfilt.sh
The kernel v6.14 added 'swfilt' to support privilege filtering in
software so that IBS can be used by regular users. Add a test case in
x86 to verify the behavior.
$ sudo perf test -vv 'IBS software filter'
113: AMD IBS software filtering:
--- start ---
test child forked, pid 178826
check availability of IBS swfilt
run perf record with modifier and swfilt
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 0.000 MB /dev/null ]
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 0.000 MB /dev/null ]
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 0.000 MB /dev/null ]
[ perf record: Woken up 0 times to write data ]
[ perf record: Captured and wrote 0.000 MB /dev/null ]
check number of samples with swfilt
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 0.037 MB - ]
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 0.041 MB - ]
---- end(0) ----
113: AMD IBS software filtering : Ok
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/tests/shell/amd-ibs-swfilt.sh | 67 ++++++++++++++++++++++++
1 file changed, 67 insertions(+)
create mode 100755 tools/perf/tests/shell/amd-ibs-swfilt.sh
diff --git a/tools/perf/tests/shell/amd-ibs-swfilt.sh b/tools/perf/tests/shell/amd-ibs-swfilt.sh
new file mode 100755
index 0000000000000000..83937aa687ccd859
--- /dev/null
+++ b/tools/perf/tests/shell/amd-ibs-swfilt.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# AMD IBS software filtering
+
+echo "check availability of IBS swfilt"
+
+# check if IBS PMU is available
+if [ ! -d /sys/bus/event_source/devices/ibs_op ]; then
+ echo "[SKIP] IBS PMU does not exist"
+ exit 2
+fi
+
+# check if IBS PMU has swfilt format
+if [ ! -f /sys/bus/event_source/devices/ibs_op/format/swfilt ]; then
+ echo "[SKIP] IBS PMU does not have swfilt"
+ exit 2
+fi
+
+echo "run perf record with modifier and swfilt"
+
+# setting any modifiers should fail
+perf record -B -e ibs_op//u -o /dev/null true 2> /dev/null
+if [ $? -eq 0 ]; then
+ echo "[FAIL] IBS PMU should not accept exclude_kernel"
+ exit 1
+fi
+
+# setting it with swfilt should be fine
+perf record -B -e ibs_op/swfilt/u -o /dev/null true
+if [ $? -ne 0 ]; then
+ echo "[FAIL] IBS op PMU cannot handle swfilt for exclude_kernel"
+ exit 1
+fi
+
+# setting it with swfilt=1 should be fine
+perf record -B -e ibs_op/swfilt=1/k -o /dev/null true
+if [ $? -ne 0 ]; then
+ echo "[FAIL] IBS op PMU cannot handle swfilt for exclude_user"
+ exit 1
+fi
+
+# check ibs_fetch PMU as well
+perf record -B -e ibs_fetch/swfilt/u -o /dev/null true
+if [ $? -ne 0 ]; then
+ echo "[FAIL] IBS fetch PMU cannot handle swfilt for exclude_kernel"
+ exit 1
+fi
+
+# check system wide recording
+perf record -aB --synth=no -e ibs_op/swfilt/k -o /dev/null true
+if [ $? -ne 0 ]; then
+ echo "[FAIL] IBS op PMU cannot handle swfilt in system-wide mode"
+ exit 1
+fi
+
+echo "check number of samples with swfilt"
+
+kernel_sample=$(perf record -e ibs_op/swfilt/u -o- true | perf script -i- -F misc | grep -c ^K)
+if [ ${kernel_sample} -ne 0 ]; then
+ echo "[FAIL] unexpected kernel samples: " ${kernel_sample}
+ exit 1
+fi
+
+user_sample=$(perf record -e ibs_fetch/swfilt/k -o- true | perf script -i- -F misc | grep -c ^U)
+if [ ${user_sample} -ne 0 ]; then
+ echo "[FAIL] unexpected user samples: " ${user_sample}
+ exit 1
+fi
--
2.49.0.1151.ga128411c76-goog
Hi Namhyung, On 24-May-25 5:57 AM, Namhyung Kim wrote: > The kernel v6.14 added 'swfilt' to support privilege filtering in > software so that IBS can be used by regular users. Add a test case in > x86 to verify the behavior. > > $ sudo perf test -vv 'IBS software filter' > 113: AMD IBS software filtering: > --- start --- > test child forked, pid 178826 > check availability of IBS swfilt > run perf record with modifier and swfilt > [ perf record: Woken up 3 times to write data ] > [ perf record: Captured and wrote 0.000 MB /dev/null ] > [ perf record: Woken up 3 times to write data ] > [ perf record: Captured and wrote 0.000 MB /dev/null ] > [ perf record: Woken up 3 times to write data ] > [ perf record: Captured and wrote 0.000 MB /dev/null ] > [ perf record: Woken up 0 times to write data ] > [ perf record: Captured and wrote 0.000 MB /dev/null ] > check number of samples with swfilt > [ perf record: Woken up 3 times to write data ] > [ perf record: Captured and wrote 0.037 MB - ] > [ perf record: Woken up 3 times to write data ] > [ perf record: Captured and wrote 0.041 MB - ] > ---- end(0) ---- > 113: AMD IBS software filtering : Ok > > Cc: Ravi Bangoria <ravi.bangoria@amd.com> > Signed-off-by: Namhyung Kim <namhyung@kernel.org> Reviewed-by: Ravi Bangoria <ravi.bangoria@amd.com> A minor nit below ... > +echo "check number of samples with swfilt" > + > +kernel_sample=$(perf record -e ibs_op/swfilt/u -o- true | perf script -i- -F misc | grep -c ^K) "true" barely runs in userspace. So, many a times this "perf record" generates no samples :) Thanks, Ravi
On Sat, May 24, 2025 at 03:17:13PM +0530, Ravi Bangoria wrote: > Hi Namhyung, > > On 24-May-25 5:57 AM, Namhyung Kim wrote: > > The kernel v6.14 added 'swfilt' to support privilege filtering in > > software so that IBS can be used by regular users. Add a test case in > > x86 to verify the behavior. > > > > $ sudo perf test -vv 'IBS software filter' > > 113: AMD IBS software filtering: > > --- start --- > > test child forked, pid 178826 > > check availability of IBS swfilt > > run perf record with modifier and swfilt > > [ perf record: Woken up 3 times to write data ] > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > [ perf record: Woken up 3 times to write data ] > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > [ perf record: Woken up 3 times to write data ] > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > [ perf record: Woken up 0 times to write data ] > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > check number of samples with swfilt > > [ perf record: Woken up 3 times to write data ] > > [ perf record: Captured and wrote 0.037 MB - ] > > [ perf record: Woken up 3 times to write data ] > > [ perf record: Captured and wrote 0.041 MB - ] > > ---- end(0) ---- > > 113: AMD IBS software filtering : Ok > > > > Cc: Ravi Bangoria <ravi.bangoria@amd.com> > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > > Reviewed-by: Ravi Bangoria <ravi.bangoria@amd.com> > > A minor nit below ... > > > +echo "check number of samples with swfilt" > > + > > +kernel_sample=$(perf record -e ibs_op/swfilt/u -o- true | perf script -i- -F misc | grep -c ^K) > > "true" barely runs in userspace. So, many a times this "perf record" > generates no samples :) Right, something else, maybe one of those workloads: acme@number:~/git/perf-tools-next$ perf test --list-workloads noploop thloop leafloop sqrtloop brstack datasym landlock acme@number:~/git/perf-tools-next$ root@number:~# time perf record -e ibs_op/swfilt/u perf test -w sqrtloop [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.160 MB perf.data (3976 samples) ] real 0m1.588s user 0m1.407s sys 0m0.161s root@number:~# perf script | wc -l 3976 root@number:~# But I'm applying the patch as is, we can replace the workload later. - Arnaldo
On Tue, May 27, 2025 at 05:51:21PM -0300, Arnaldo Carvalho de Melo wrote: > On Sat, May 24, 2025 at 03:17:13PM +0530, Ravi Bangoria wrote: > > Hi Namhyung, > > > > On 24-May-25 5:57 AM, Namhyung Kim wrote: > > > The kernel v6.14 added 'swfilt' to support privilege filtering in > > > software so that IBS can be used by regular users. Add a test case in > > > x86 to verify the behavior. > > > > > > $ sudo perf test -vv 'IBS software filter' > > > 113: AMD IBS software filtering: > > > --- start --- > > > test child forked, pid 178826 > > > check availability of IBS swfilt > > > run perf record with modifier and swfilt > > > [ perf record: Woken up 3 times to write data ] > > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > > [ perf record: Woken up 3 times to write data ] > > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > > [ perf record: Woken up 3 times to write data ] > > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > > [ perf record: Woken up 0 times to write data ] > > > [ perf record: Captured and wrote 0.000 MB /dev/null ] > > > check number of samples with swfilt > > > [ perf record: Woken up 3 times to write data ] > > > [ perf record: Captured and wrote 0.037 MB - ] > > > [ perf record: Woken up 3 times to write data ] > > > [ perf record: Captured and wrote 0.041 MB - ] > > > ---- end(0) ---- > > > 113: AMD IBS software filtering : Ok > > > > > > Cc: Ravi Bangoria <ravi.bangoria@amd.com> > > > Signed-off-by: Namhyung Kim <namhyung@kernel.org> > > > > Reviewed-by: Ravi Bangoria <ravi.bangoria@amd.com> > > > > A minor nit below ... > > > > > +echo "check number of samples with swfilt" > > > + > > > +kernel_sample=$(perf record -e ibs_op/swfilt/u -o- true | perf script -i- -F misc | grep -c ^K) > > > > "true" barely runs in userspace. So, many a times this "perf record" > > generates no samples :) > > Right, something else, maybe one of those workloads: > > acme@number:~/git/perf-tools-next$ perf test --list-workloads > noploop > thloop > leafloop > sqrtloop > brstack > datasym > landlock > acme@number:~/git/perf-tools-next$ > > root@number:~# time perf record -e ibs_op/swfilt/u perf test -w sqrtloop > [ perf record: Woken up 1 times to write data ] > [ perf record: Captured and wrote 0.160 MB perf.data (3976 samples) ] > > real 0m1.588s > user 0m1.407s > sys 0m0.161s > root@number:~# perf script | wc -l > 3976 > root@number:~# > > But I'm applying the patch as is, we can replace the workload later. Thanks, I can add some workload to create both kernel and user traffic. I think the current workloads run in user space mostly. Thanks, Namhyung
© 2016 - 2025 Red Hat, Inc.