[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0fef6ce4-86cd-ae3a-0a29-953d87402afe@iogearbox.net>
Date: Tue, 3 Nov 2020 00:08:23 +0100
From: Daniel Borkmann <daniel@...earbox.net>
To: Weqaar Janjua <weqaar.janjua@...il.com>, bpf@...r.kernel.org,
netdev@...r.kernel.org, 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,
andrii.nakryiko@...il.com
Subject: Re: [PATCH bpf-next 0/5] selftests/xsk: xsk selftests
On 10/30/20 1:13 PM, Weqaar Janjua wrote:
> This patch set adds AF_XDP selftests based on veth to selftests/xsk/.
>
> # 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_PREREQUISITES.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
> that is read by test scripts - filenames prefixed with TEST_XSK
> *** xxxx and yyyy are randomly generated 4 digit numbers used to avoid
> conflict with any existing interface.
>
> 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
>
> Structure of the patch set:
>
> Patch 1: This patch adds XSK Selftests framework under
> tools/testing/selftests/xsk, and README
> Patch 2: Adds tests: SKB poll and nopoll mode, mac-ip-udp debug,
> and README updates
> Patch 3: Adds tests: DRV poll and nopoll mode, and README updates
> Patch 4: Adds tests: SKB and DRV Socket Teardown, and README updates
> Patch 5: Adds tests: SKB and DRV Bi-directional Sockets, and README
> updates
>
> Thanks: Weqaar
>
> Weqaar Janjua (5):
> selftests/xsk: xsk selftests framework
> selftests/xsk: xsk selftests - SKB POLL, NOPOLL
> selftests/xsk: xsk selftests - DRV POLL, NOPOLL
> selftests/xsk: xsk selftests - Socket Teardown - SKB, DRV
> selftests/xsk: xsk selftests - Bi-directional Sockets - SKB, DRV
Thanks a lot for adding the selftests, Weqaar! Given this needs to copy quite
a bit of BPF selftest base infra e.g. from Makefiles I'd prefer if you could
place these under selftests/bpf/ instead to avoid duplicating changes into two
locations. I understand that these tests don't integrate well into test_progs,
but for example see test_tc_redirect.sh or test_tc_edt.sh for stand-alone tests
which could be done similarly with the xsk ones. Would be great if you could
integrate them and spin a v2 with that.
Thanks,
Daniel
Powered by blists - more mailing lists