[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <956522ac-5a57-3755-ede5-6d33169ce6e1@fb.com>
Date: Mon, 7 Dec 2020 19:56:31 -0800
From: Yonghong Song <yhs@...com>
To: Weqaar Janjua <weqaar.janjua@...il.com>, <bpf@...r.kernel.org>,
<netdev@...r.kernel.org>, <daniel@...earbox.net>, <ast@...nel.org>,
<magnus.karlsson@...il.com>, <bjorn.topel@...el.com>
CC: Weqaar Janjua <weqaar.a.janjua@...el.com>, <shuah@...nel.org>,
<skhan@...uxfoundation.org>, <linux-kselftest@...r.kernel.org>,
<anders.roxell@...aro.org>, <jonathan.lemon@...il.com>
Subject: Re: [PATCH bpf-next v4 0/5] selftests/bpf: xsk selftests
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@...com>
Powered by blists - more mailing lists