[PATCH bpf-next v2 3/5] selftests/bpf: xsk selftests - DRV POLL, NOPOLL
From: Weqaar Janjua <hidden>
Date: 2020-11-20 13:00:53
Also in:
bpf, linux-kselftest
Subsystem:
bpf [general] (safe dynamic programs and tools), bpf [selftests] (test runners & infrastructure), kernel selftest framework, the rest, xdp (express data path), xdp sockets (af_xdp) · Maintainers:
Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi, Shuah Khan, Shuah Khan, Linus Torvalds, David S. Miller, Jakub Kicinski, Jesper Dangaard Brouer, John Fastabend, Magnus Karlsson, Maciej Fijalkowski
Adds following tests:
2. AF_XDP DRV/Native mode
Works on any netdevice with XDP_REDIRECT support, driver dependent.
Processes packets before SKB allocation. Provides better performance
than SKB. Driver hook available just after DMA of buffer descriptor.
a. nopoll
b. poll
* Only copy mode is supported because veth does not currently support
zero-copy mode
Signed-off-by: Weqaar Janjua <redacted>
---
tools/testing/selftests/bpf/Makefile | 4 +++-
.../selftests/bpf/test_xsk_drv_nopoll.sh | 20 ++++++++++++++++
.../selftests/bpf/test_xsk_drv_poll.sh | 23 +++++++++++++++++++
.../selftests/bpf/test_xsk_skb_poll.sh | 3 ---
tools/testing/selftests/bpf/xdpxceiver.c | 22 +++++++++++++++---
tools/testing/selftests/bpf/xdpxceiver.h | 1 +
6 files changed, 66 insertions(+), 7 deletions(-)
create mode 100755 tools/testing/selftests/bpf/test_xsk_drv_nopoll.sh
create mode 100755 tools/testing/selftests/bpf/test_xsk_drv_poll.sh
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index 17af570a32d7..9dd3f3b9014f 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile@@ -74,7 +74,9 @@ TEST_PROGS := test_kmod.sh \ test_bpftool_metadata.sh \ test_xsk_prerequisites.sh \ test_xsk_skb_nopoll.sh \ - test_xsk_skb_poll.sh + test_xsk_skb_poll.sh \ + test_xsk_drv_nopoll.sh \ + test_xsk_drv_poll.sh TEST_PROGS_EXTENDED := with_addr.sh \ with_tunnels.sh \
diff --git a/tools/testing/selftests/bpf/test_xsk_drv_nopoll.sh b/tools/testing/selftests/bpf/test_xsk_drv_nopoll.sh
new file mode 100755
index 000000000000..a7e895bc4bfd
--- /dev/null
+++ b/tools/testing/selftests/bpf/test_xsk_drv_nopoll.sh@@ -0,0 +1,20 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright(c) 2020 Intel Corporation. + +# See test_xsk_prerequisites.sh for detailed information on tests + +. xsk_prereqs.sh +. xsk_env.sh + +TEST_NAME="DRV NOPOLL" + +vethXDPnative ${VETH0} ${VETH1} ${NS1} + +params=("-N") +execxdpxceiver params + +retval=$? +test_status $retval "${TEST_NAME}" + +test_exit $retval 0
diff --git a/tools/testing/selftests/bpf/test_xsk_drv_poll.sh b/tools/testing/selftests/bpf/test_xsk_drv_poll.sh
new file mode 100755
index 000000000000..1fe488d5794a
--- /dev/null
+++ b/tools/testing/selftests/bpf/test_xsk_drv_poll.sh@@ -0,0 +1,23 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright(c) 2020 Intel Corporation. + +# See test_xsk_prerequisites.sh for detailed information on tests + +. xsk_prereqs.sh +. xsk_env.sh + +TEST_NAME="DRV POLL" + +vethXDPnative ${VETH0} ${VETH1} ${NS1} + +params=("-N" "-p") +execxdpxceiver params + +retval=$? +test_status $retval "${TEST_NAME}" + +# Must be called in the last test to execute +cleanup_exit ${VETH0} ${VETH1} ${NS1} + +test_exit $retval 0
diff --git a/tools/testing/selftests/bpf/test_xsk_skb_poll.sh b/tools/testing/selftests/bpf/test_xsk_skb_poll.sh
index d152c8a24251..962a89b40a32 100755
--- a/tools/testing/selftests/bpf/test_xsk_skb_poll.sh
+++ b/tools/testing/selftests/bpf/test_xsk_skb_poll.sh@@ -17,7 +17,4 @@ execxdpxceiver params retval=$? test_status $retval "${TEST_NAME}" -# Must be called in the last test to execute -cleanup_exit ${VETH0} ${VETH1} ${NS1} - test_exit $retval 0
diff --git a/tools/testing/selftests/bpf/xdpxceiver.c b/tools/testing/selftests/bpf/xdpxceiver.c
index 106307155bbe..e998200502de 100644
--- a/tools/testing/selftests/bpf/xdpxceiver.c
+++ b/tools/testing/selftests/bpf/xdpxceiver.c@@ -27,7 +27,16 @@ * a. nopoll - soft-irq processing * b. poll - using poll() syscall * - * Total tests: 2 + * 2. AF_XDP DRV/Native mode + * Works on any netdevice with XDP_REDIRECT support, driver dependent. Processes + * packets before SKB allocation. Provides better performance than SKB. Driver + * hook available just after DMA of buffer descriptor. + * a. nopoll + * b. poll + * - Only copy mode is supported because veth does not currently support + * zero-copy mode + * + * Total tests: 4 * * Flow: * -----
@@ -87,7 +96,7 @@ static void __exit_with_error(int error, const char *file, const char *func, int #define exit_with_error(error) __exit_with_error(error, __FILE__, __func__, __LINE__) #define print_ksft_result(void)\ - (ksft_test_result_pass("PASS: %s %s\n", uut ? "" : "SKB", opt_poll ? "POLL" : "NOPOLL")) + (ksft_test_result_pass("PASS: %s %s\n", uut ? "DRV" : "SKB", opt_poll ? "POLL" : "NOPOLL")) static void pthread_init_mutex(void) {
@@ -310,6 +319,7 @@ static struct option long_options[] = { {"queue", optional_argument, 0, 'q'}, {"poll", no_argument, 0, 'p'}, {"xdp-skb", no_argument, 0, 'S'}, + {"xdp-native", no_argument, 0, 'N'}, {"copy", no_argument, 0, 'c'}, {"debug", optional_argument, 0, 'D'}, {"tx-pkt-count", optional_argument, 0, 'C'},
@@ -325,6 +335,7 @@ static void usage(const char *prog) " -q, --queue=n Use queue n (default 0)\n" " -p, --poll Use poll syscall\n" " -S, --xdp-skb=n Use XDP SKB mode\n" + " -N, --xdp-native=n Enforce XDP DRV (native) mode\n" " -c, --copy Force copy mode\n" " -D, --debug Debug mode - dump packets L2 - L5\n" " -C, --tx-pkt-count=n Number of packets to send\n";
@@ -416,7 +427,7 @@ static void parse_command_line(int argc, char **argv) opterr = 0; for (;;) { - c = getopt_long(argc, argv, "i:q:pScDC:", long_options, &option_index); + c = getopt_long(argc, argv, "i:q:pSNcDC:", long_options, &option_index); if (c == -1) break;
@@ -446,6 +457,11 @@ static void parse_command_line(int argc, char **argv) opt_xdp_bind_flags |= XDP_COPY; uut = ORDER_CONTENT_VALIDATE_XDP_SKB; break; + case 'N': + opt_xdp_flags |= XDP_FLAGS_DRV_MODE; + opt_xdp_bind_flags |= XDP_COPY; + uut = ORDER_CONTENT_VALIDATE_XDP_DRV; + break; case 'c': opt_xdp_bind_flags |= XDP_COPY; break;
diff --git a/tools/testing/selftests/bpf/xdpxceiver.h b/tools/testing/selftests/bpf/xdpxceiver.h
index 32ee33311141..dba47e818466 100644
--- a/tools/testing/selftests/bpf/xdpxceiver.h
+++ b/tools/testing/selftests/bpf/xdpxceiver.h@@ -44,6 +44,7 @@ typedef __u8 u8; enum TESTS { ORDER_CONTENT_VALIDATE_XDP_SKB = 0, + ORDER_CONTENT_VALIDATE_XDP_DRV = 1, }; u8 uut;
--
2.20.1