Message ID | 20201207215333.11586-1-weqaar.a.janjua@intel.com |
---|---|
Headers | show |
Series | selftests/bpf: xsk selftests | expand |
On 12/7/20 1:53 PM, Weqaar Janjua wrote: > This patch set adds AF_XDP selftests based on veth to selftests/bpf. > > # Topology: > # --------- > # ----------- > # _ | Process | _ > # / ----------- \ > # / | \ > # / | \ > # ----------- | ----------- > # | Thread1 | | | Thread2 | > # ----------- | ----------- > # | | | > # ----------- | ----------- > # | xskX | | | xskY | > # ----------- | ----------- > # | | | > # ----------- | ---------- > # | vethX | --------- | vethY | > # ----------- peer ---------- > # | | | > # namespaceX | namespaceY > > These selftests test AF_XDP SKB and Native/DRV modes using veth Virtual > Ethernet interfaces. > > The test program contains two threads, each thread is single socket with > a unique UMEM. It validates in-order packet delivery and packet content > by sending packets to each other. > > Prerequisites setup by script test_xsk.sh: > > Set up veth interfaces as per the topology shown ^^: > * setup two veth interfaces and one namespace > ** veth<xxxx> in root namespace > ** veth<yyyy> in af_xdp<xxxx> namespace > ** namespace af_xdp<xxxx> > * create a spec file veth.spec that includes this run-time configuration > *** xxxx and yyyy are randomly generated 4 digit numbers used to avoid > conflict with any existing interface > > Adds xsk framework test to validate veth xdp DRV and SKB modes. > > The following tests are provided: > > 1. AF_XDP SKB mode > Generic mode XDP is driver independent, used when the driver does > not have support for XDP. Works on any netdevice using sockets and > generic XDP path. XDP hook from netif_receive_skb(). > a. nopoll - soft-irq processing > b. poll - using poll() syscall > c. Socket Teardown > Create a Tx and a Rx socket, Tx from one socket, Rx on another. > Destroy both sockets, then repeat multiple times. Only nopoll mode > is used > d. Bi-directional Sockets > Configure sockets as bi-directional tx/rx sockets, sets up fill > and completion rings on each socket, tx/rx in both directions. > Only nopoll mode is used > > 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 > c. Socket Teardown > d. Bi-directional Sockets > * Only copy mode is supported because veth does not currently support > zero-copy mode > > Total tests: 8 > > Flow: > * Single process spawns two threads: Tx and Rx > * Each of these two threads attach to a veth interface within their > assigned namespaces > * Each thread creates one AF_XDP socket connected to a unique umem > for each veth interface > * Tx thread transmits 10k packets from veth<xxxx> to veth<yyyy> > * Rx thread verifies if all 10k packets were received and delivered > in-order, and have the right content > > v2 changes: > * Move selftests/xsk to selftests/bpf > * Remove Makefiles under selftests/xsk, and utilize selftests/bpf/Makefile > > v3 changes: > * merge all test scripts test_xsk_*.sh into test_xsk.sh > > v4 changes: > * merge xsk_env.sh into xsk_prereqs.sh > * test_xsk.sh add cliarg -c for color-coded output > * test_xsk.sh PREREQUISITES disables IPv6 on veth interfaces > * test_xsk.sh PREREQUISITES adds xsk framework test > * test_xsk.sh is independently executable > * xdpxceiver.c Tx/Rx validates only IPv4 packets with TOS 0x9, ignores > others > > Structure of the patch set: > > Patch 1: Adds XSK selftests framework and test under selftests/bpf > Patch 2: Adds tests: SKB poll and nopoll mode, and mac-ip-udp debug > Patch 3: Adds tests: DRV poll and nopoll mode > Patch 4: Adds tests: SKB and DRV Socket Teardown > Patch 5: Adds tests: SKB and DRV Bi-directional Sockets > > Thanks: Weqaar > > Weqaar Janjua (5): > selftests/bpf: xsk selftests framework > selftests/bpf: xsk selftests - SKB POLL, NOPOLL > selftests/bpf: xsk selftests - DRV POLL, NOPOLL > selftests/bpf: xsk selftests - Socket Teardown - SKB, DRV > selftests/bpf: xsk selftests - Bi-directional Sockets - SKB, DRV > > tools/testing/selftests/bpf/Makefile | 7 +- > tools/testing/selftests/bpf/test_xsk.sh | 259 +++++ > tools/testing/selftests/bpf/xdpxceiver.c | 1074 ++++++++++++++++++++ > tools/testing/selftests/bpf/xdpxceiver.h | 160 +++ > tools/testing/selftests/bpf/xsk_prereqs.sh | 135 +++ > 5 files changed, 1633 insertions(+), 2 deletions(-) > create mode 100755 tools/testing/selftests/bpf/test_xsk.sh > create mode 100644 tools/testing/selftests/bpf/xdpxceiver.c > create mode 100644 tools/testing/selftests/bpf/xdpxceiver.h > create mode 100755 tools/testing/selftests/bpf/xsk_prereqs.sh All tests passed in my environment. Tested-by: Yonghong Song <yhs@fb.com>
On 2020-12-08 04:56, Yonghong Song wrote: > On 12/7/20 1:53 PM, Weqaar Janjua wrote: >> This patch set adds AF_XDP selftests based on veth to selftests/bpf. [...] > > All tests passed in my environment. > Tested-by: Yonghong Song <yhs@fb.com> > Thanks for the hard work, Weqaar! And thanks Yonghong for testing/feedback. From my perspective this is a good selftest base for AF_XDP, and something we can continue to build on. For the series: Acked-by: Björn Töpel <bjorn.topel@intel.com>
Hello: This series was applied to bpf/bpf-next.git (refs/heads/master): On Mon, 7 Dec 2020 21:53:28 +0000 you wrote: > This patch set adds AF_XDP selftests based on veth to selftests/bpf. > > # Topology: > # --------- > # ----------- > # _ | Process | _ > # / ----------- \ > # / | \ > # / | \ > # ----------- | ----------- > # | Thread1 | | | Thread2 | > # ----------- | ----------- > # | | | > # ----------- | ----------- > # | xskX | | | xskY | > # ----------- | ----------- > # | | | > # ----------- | ---------- > # | vethX | --------- | vethY | > # ----------- peer ---------- > # | | | > # namespaceX | namespaceY > > [...] Here is the summary with links: - [bpf-next,v4,1/5] selftests/bpf: xsk selftests framework https://git.kernel.org/bpf/bpf-next/c/a89052572ebb - [bpf-next,v4,2/5] selftests/bpf: xsk selftests - SKB POLL, NOPOLL https://git.kernel.org/bpf/bpf-next/c/facb7cb2e909 - [bpf-next,v4,3/5] selftests/bpf: xsk selftests - DRV POLL, NOPOLL https://git.kernel.org/bpf/bpf-next/c/9103a8594d93 - [bpf-next,v4,4/5] selftests/bpf: xsk selftests - Socket Teardown - SKB, DRV https://git.kernel.org/bpf/bpf-next/c/6674bf66560a - [bpf-next,v4,5/5] selftests/bpf: xsk selftests - Bi-directional Sockets - SKB, DRV https://git.kernel.org/bpf/bpf-next/c/7d20441eb05e You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html