[PATCH 00/13] selftests/bpf: Integrate test_xsk.c to test_progs framework

Bastien Curutchet (eBPF Foundation) posted 13 patches 9 months, 1 week ago
There is a newer version of this series
tools/testing/selftests/bpf/Makefile              |   13 +-
tools/testing/selftests/bpf/prog_tests/test_xsk.c | 2416 ++++++++++++++++++++
tools/testing/selftests/bpf/prog_tests/test_xsk.h |  299 +++
tools/testing/selftests/bpf/prog_tests/xsk.c      |  178 ++
tools/testing/selftests/bpf/xskxceiver.c          | 2543 +--------------------
tools/testing/selftests/bpf/xskxceiver.h          |  153 --
6 files changed, 3021 insertions(+), 2581 deletions(-)
[PATCH 00/13] selftests/bpf: Integrate test_xsk.c to test_progs framework
Posted by Bastien Curutchet (eBPF Foundation) 9 months, 1 week ago
Hi all,

This patch series continues the work to migrate the script tests into
prog_tests.

The test_xsk.sh script tests lots of AF_XDP use cases. The tests it uses
are defined in xksxceiver.c. As this script is used to test real
hardware, the goal here is to keep it as is and only integrate the
tests on veth peers into the test_progs framework.
Three tests are flaky on s390 so they won't be integrated to test_progs
yet (I'm currently trying to make them more robust).

PATCH 1 & 2 fix some small issues xskxceiver.c
PATCH 3 to 9 rework the xskxceiver to ease the integration in the
test_progs framework. Two main points are addressed in them :
 - wrap kselftest calls behind macros to ease their replacement later
 - handle all errors to release resources instead of calling exit() when
   any error occurs.
PATCH 10 extracts test_xsk[.c/.h] from xskxceiver[.c/.h] to make the
tests available to test_progs
PATCH 11 enables kselftest de-activation
PATCH 12 isolates the flaky tests
PATCH 13 integrate the non-flaky tests to the test_progs framework

Signed-off-by: Bastien Curutchet (eBPF Foundation) <bastien.curutchet@bootlin.com>
---
Bastien Curutchet (eBPF Foundation) (13):
      selftests/bpf: test_xsk: Initialize bitmap before use
      selftests/bpf: test_xsk: Fix memory leaks
      selftests/bpf: test_xsk: Wrap ksft_*() behind macros
      selftests/bpf: test_xsk: Add return value to init_iface()
      selftests/bpf: test_xsk: Don't exit immediately when xsk_attach fails
      selftests/bpf: test_xsk: Don't exit immediately when gettimeofday fails
      selftests/bpf: test_xsk: Don't exit immediately when workers fail
      selftests/bpf: test_xsk: Don't exit immediately if validate_traffic fails
      selftests/bpf: test_xsk: Don't exit immediately on allocation failures
      selftests/bpf: test_xsk: Split xskxceiver
      selftests/bpf: test_xsk: Make kselftest dependency optional
      selftests/bpf: test_xsk: Isolate flaky tests
      selftests/bpf: test_xsk: Integrate test_xsk.c to test_progs framework

 tools/testing/selftests/bpf/Makefile              |   13 +-
 tools/testing/selftests/bpf/prog_tests/test_xsk.c | 2416 ++++++++++++++++++++
 tools/testing/selftests/bpf/prog_tests/test_xsk.h |  299 +++
 tools/testing/selftests/bpf/prog_tests/xsk.c      |  178 ++
 tools/testing/selftests/bpf/xskxceiver.c          | 2543 +--------------------
 tools/testing/selftests/bpf/xskxceiver.h          |  153 --
 6 files changed, 3021 insertions(+), 2581 deletions(-)
---
base-commit: 720c696b16a1b1680f64cac9b3bb9e312a23ac47
change-id: 20250218-xsk-0cf90e975d14

Best regards,
-- 
Bastien Curutchet (eBPF Foundation) <bastien.curutchet@bootlin.com>
Re: [PATCH 00/13] selftests/bpf: Integrate test_xsk.c to test_progs framework
Posted by Bastien Curutchet 9 months, 1 week ago
Hi all,

On 3/13/25 11:47 AM, Bastien Curutchet (eBPF Foundation) wrote:
> Hi all,
> 
> This patch series continues the work to migrate the script tests into
> prog_tests.
> 
> The test_xsk.sh script tests lots of AF_XDP use cases. The tests it uses
> are defined in xksxceiver.c. As this script is used to test real
> hardware, the goal here is to keep it as is and only integrate the
> tests on veth peers into the test_progs framework.
> Three tests are flaky on s390 so they won't be integrated to test_progs
> yet (I'm currently trying to make them more robust).
> 
> PATCH 1 & 2 fix some small issues xskxceiver.c
> PATCH 3 to 9 rework the xskxceiver to ease the integration in the
> test_progs framework. Two main points are addressed in them :
>   - wrap kselftest calls behind macros to ease their replacement later
>   - handle all errors to release resources instead of calling exit() when
>     any error occurs.
> PATCH 10 extracts test_xsk[.c/.h] from xskxceiver[.c/.h] to make the
> tests available to test_progs
> PATCH 11 enables kselftest de-activation
> PATCH 12 isolates the flaky tests
> PATCH 13 integrate the non-flaky tests to the test_progs framework
> 
> Signed-off-by: Bastien Curutchet (eBPF Foundation) <bastien.curutchet@bootlin.com>
> ---
> Bastien Curutchet (eBPF Foundation) (13):
>        selftests/bpf: test_xsk: Initialize bitmap before use
>        selftests/bpf: test_xsk: Fix memory leaks
>        selftests/bpf: test_xsk: Wrap ksft_*() behind macros
>        selftests/bpf: test_xsk: Add return value to init_iface()
>        selftests/bpf: test_xsk: Don't exit immediately when xsk_attach fails
>        selftests/bpf: test_xsk: Don't exit immediately when gettimeofday fails
>        selftests/bpf: test_xsk: Don't exit immediately when workers fail
>        selftests/bpf: test_xsk: Don't exit immediately if validate_traffic fails
>        selftests/bpf: test_xsk: Don't exit immediately on allocation failures
>        selftests/bpf: test_xsk: Split xskxceiver
>        selftests/bpf: test_xsk: Make kselftest dependency optional
>        selftests/bpf: test_xsk: Isolate flaky tests
>        selftests/bpf: test_xsk: Integrate test_xsk.c to test_progs framework
> 
>   tools/testing/selftests/bpf/Makefile              |   13 +-
>   tools/testing/selftests/bpf/prog_tests/test_xsk.c | 2416 ++++++++++++++++++++
>   tools/testing/selftests/bpf/prog_tests/test_xsk.h |  299 +++
>   tools/testing/selftests/bpf/prog_tests/xsk.c      |  178 ++
>   tools/testing/selftests/bpf/xskxceiver.c          | 2543 +--------------------
>   tools/testing/selftests/bpf/xskxceiver.h          |  153 --
>   6 files changed, 3021 insertions(+), 2581 deletions(-)
> ---
> base-commit: 720c696b16a1b1680f64cac9b3bb9e312a23ac47
> change-id: 20250218-xsk-0cf90e975d14

I realize that I forgot to mention 'bpf-next', sorry about that.
This work is based on the bpf-next_base branch.

Best regards,
Bastien
Re: [PATCH 00/13] selftests/bpf: Integrate test_xsk.c to test_progs framework
Posted by Maciej Fijalkowski 9 months, 1 week ago
On Thu, Mar 13, 2025 at 11:47:58AM +0100, Bastien Curutchet (eBPF Foundation) wrote:
> Hi all,
> 
> This patch series continues the work to migrate the script tests into
> prog_tests.

Hi Bastien,

the sole purpose of this is a cleanup of some sort?

> 
> The test_xsk.sh script tests lots of AF_XDP use cases. The tests it uses
> are defined in xksxceiver.c. As this script is used to test real
> hardware, the goal here is to keep it as is and only integrate the
> tests on veth peers into the test_progs framework.

We're doubling the functionality for no additional benefits? Or the
benefit of this set would be the veth xsk tests execution within BPF CI?

> Three tests are flaky on s390 so they won't be integrated to test_progs
> yet (I'm currently trying to make them more robust).
> 
> PATCH 1 & 2 fix some small issues xskxceiver.c
> PATCH 3 to 9 rework the xskxceiver to ease the integration in the
> test_progs framework. Two main points are addressed in them :
>  - wrap kselftest calls behind macros to ease their replacement later
>  - handle all errors to release resources instead of calling exit() when
>    any error occurs.
> PATCH 10 extracts test_xsk[.c/.h] from xskxceiver[.c/.h] to make the
> tests available to test_progs
> PATCH 11 enables kselftest de-activation
> PATCH 12 isolates the flaky tests
> PATCH 13 integrate the non-flaky tests to the test_progs framework

I didn't bisect but this set breaks the HW tests for me which *is* what we
care about. I'll dig onto that on monday and will get back to you.

sudo ./test_xsk.sh -i enp24s0f1np1
PREREQUISITES: [ PASS ]
1..93
ok 1 PASS: SKB SEND_RECEIVE
ok 2 PASS: SKB SEND_RECEIVE_2K_FRAME
ok 3 PASS: SKB SEND_RECEIVE_SINGLE_PKT
ok 4 PASS: SKB POLL_RX
ok 5 PASS: SKB POLL_TX
ok 6 PASS: SKB POLL_RXQ_FULL
ok 7 PASS: SKB POLL_TXQ_FULL
ok 1 # SKIP No huge pages present.
ok 8 PASS: SKB ALIGNED_INV_DESC
ok 9 PASS: SKB ALIGNED_INV_DESC_2K_FRAME_SIZE
ok 2 # SKIP No huge pages present.
ok 3 # SKIP No huge pages present.
ok 10 PASS: SKB UMEM_HEADROOM
ok 11 PASS: SKB BIDIRECTIONAL
ok 12 PASS: SKB STAT_RX_DROPPED
ok 13 PASS: SKB STAT_TX_INVALID
ok 14 PASS: SKB STAT_RX_FULL
ok 15 PASS: SKB STAT_FILL_EMPTY
ok 16 PASS: SKB XDP_PROG_CLEANUP
ok 17 PASS: SKB XDP_DROP_HALF
ok 18 PASS: SKB XDP_SHARED_UMEM
ok 19 PASS: SKB XDP_METADATA_COPY
ok 20 PASS: SKB XDP_METADATA_COPY_MULTI_BUFF
ok 21 PASS: SKB ALIGNED_INV_DESC_MULTI_BUFF
ok 4 # SKIP No huge pages present.
ok 22 PASS: SKB TOO_MANY_FRAGS
ok 23 PASS: SKB HW_SW_MIN_RING_SIZE
not ok 5 FAIL: SKB TEARDOWN
not ok 6 FAIL: SKB SEND_RECEIVE_9K_PACKETS
ok 7 # SKIP No huge pages present.
not ok 8 FAIL: DRV SEND_RECEIVE
not ok 9 FAIL: DRV SEND_RECEIVE_2K_FRAME
not ok 10 FAIL: DRV SEND_RECEIVE_SINGLE_PKT
not ok 11 FAIL: DRV POLL_RX
not ok 12 FAIL: DRV POLL_TX
ok 24 PASS: DRV POLL_RXQ_FULL
ok 25 PASS: DRV POLL_TXQ_FULL
ok 13 # SKIP No huge pages present.
not ok 14 FAIL: DRV ALIGNED_INV_DESC
not ok 15 FAIL: DRV ALIGNED_INV_DESC_2K_FRAME_SIZE
ok 16 # SKIP No huge pages present.
ok 17 # SKIP No huge pages present.
not ok 18 FAIL: DRV UMEM_HEADROOM
not ok 19 FAIL: DRV BIDIRECTIONAL
not ok 20 FAIL: DRV STAT_RX_DROPPED
not ok 21 FAIL: DRV STAT_TX_INVALID
not ok 22 FAIL: DRV STAT_RX_FULL
not ok 23 FAIL: DRV STAT_FILL_EMPTY
not ok 24 FAIL: DRV XDP_PROG_CLEANUP
not ok 25 FAIL: DRV XDP_DROP_HALF
not ok 26 FAIL: DRV XDP_SHARED_UMEM
not ok 27 FAIL: DRV XDP_METADATA_COPY
not ok 28 FAIL: DRV XDP_METADATA_COPY_MULTI_BUFF
not ok 29 FAIL: DRV ALIGNED_INV_DESC_MULTI_BUFF
ok 30 # SKIP No huge pages present.
not ok 31 FAIL: DRV TOO_MANY_FRAGS
ok 32 # SKIP Failed to change HW ring size.
not ok 33 FAIL: DRV HW_SW_MAX_RING_SIZE
not ok 34 FAIL: DRV TEARDOWN
not ok 35 FAIL: DRV SEND_RECEIVE_9K_PACKETS
ok 36 # SKIP No huge pages present.
not ok 37 FAIL: ZC SEND_RECEIVE
not ok 38 FAIL: ZC SEND_RECEIVE_2K_FRAME
not ok 39 FAIL: ZC SEND_RECEIVE_SINGLE_PKT
not ok 40 FAIL: ZC POLL_RX
not ok 41 FAIL: ZC POLL_TX
ok 26 PASS: ZC POLL_RXQ_FULL
ok 27 PASS: ZC POLL_TXQ_FULL
ok 42 # SKIP No huge pages present.
not ok 43 FAIL: ZC ALIGNED_INV_DESC
not ok 44 FAIL: ZC ALIGNED_INV_DESC_2K_FRAME_SIZE
ok 45 # SKIP No huge pages present.
ok 46 # SKIP No huge pages present.
not ok 47 FAIL: ZC UMEM_HEADROOM
not ok 48 FAIL: ZC BIDIRECTIONAL
ok 49 # SKIP Can not run RX_DROPPED test for ZC mode
not ok 50 FAIL: ZC STAT_TX_INVALID
not ok 51 FAIL: ZC STAT_RX_FULL
not ok 52 FAIL: ZC STAT_FILL_EMPTY
not ok 53 FAIL: ZC XDP_PROG_CLEANUP
not ok 54 FAIL: ZC XDP_DROP_HALF
not ok 55 FAIL: ZC XDP_SHARED_UMEM
not ok 56 FAIL: ZC XDP_METADATA_COPY
not ok 57 FAIL: ZC XDP_METADATA_COPY_MULTI_BUFF
not ok 58 FAIL: ZC ALIGNED_INV_DESC_MULTI_BUFF
ok 59 # SKIP No huge pages present.
not ok 60 FAIL: ZC TOO_MANY_FRAGS
ok 61 # SKIP Failed to change HW ring size.
not ok 62 FAIL: ZC HW_SW_MAX_RING_SIZE
not ok 63 FAIL: ZC TEARDOWN
not ok 64 FAIL: ZC SEND_RECEIVE_9K_PACKETS
ok 65 # SKIP No huge pages present.
# Planned tests != run tests (93 != 27)
# Totals: pass:27 fail:0 xfail:0 xpass:0 skip:0 error:0

(same for BUSY-POLL).

> 
> Signed-off-by: Bastien Curutchet (eBPF Foundation) <bastien.curutchet@bootlin.com>
> ---
> Bastien Curutchet (eBPF Foundation) (13):
>       selftests/bpf: test_xsk: Initialize bitmap before use
>       selftests/bpf: test_xsk: Fix memory leaks
>       selftests/bpf: test_xsk: Wrap ksft_*() behind macros
>       selftests/bpf: test_xsk: Add return value to init_iface()
>       selftests/bpf: test_xsk: Don't exit immediately when xsk_attach fails
>       selftests/bpf: test_xsk: Don't exit immediately when gettimeofday fails
>       selftests/bpf: test_xsk: Don't exit immediately when workers fail
>       selftests/bpf: test_xsk: Don't exit immediately if validate_traffic fails
>       selftests/bpf: test_xsk: Don't exit immediately on allocation failures
>       selftests/bpf: test_xsk: Split xskxceiver
>       selftests/bpf: test_xsk: Make kselftest dependency optional
>       selftests/bpf: test_xsk: Isolate flaky tests
>       selftests/bpf: test_xsk: Integrate test_xsk.c to test_progs framework
> 
>  tools/testing/selftests/bpf/Makefile              |   13 +-
>  tools/testing/selftests/bpf/prog_tests/test_xsk.c | 2416 ++++++++++++++++++++
>  tools/testing/selftests/bpf/prog_tests/test_xsk.h |  299 +++
>  tools/testing/selftests/bpf/prog_tests/xsk.c      |  178 ++
>  tools/testing/selftests/bpf/xskxceiver.c          | 2543 +--------------------
>  tools/testing/selftests/bpf/xskxceiver.h          |  153 --
>  6 files changed, 3021 insertions(+), 2581 deletions(-)
> ---
> base-commit: 720c696b16a1b1680f64cac9b3bb9e312a23ac47
> change-id: 20250218-xsk-0cf90e975d14
> 
> Best regards,
> -- 
> Bastien Curutchet (eBPF Foundation) <bastien.curutchet@bootlin.com>
>
Re: [PATCH 00/13] selftests/bpf: Integrate test_xsk.c to test_progs framework
Posted by Bastien Curutchet 9 months, 1 week ago
Hi Maciej

On 3/14/25 4:45 PM, Maciej Fijalkowski wrote:
> On Thu, Mar 13, 2025 at 11:47:58AM +0100, Bastien Curutchet (eBPF Foundation) wrote:
>> Hi all,
>>
>> This patch series continues the work to migrate the script tests into
>> prog_tests.
> 
> Hi Bastien,
> 
> the sole purpose of this is a cleanup of some sort?
> 

The goal is to have more tests run by the CI and fewer standalone 
scripts so that regressions are spotted more efficiently.

>>
>> The test_xsk.sh script tests lots of AF_XDP use cases. The tests it uses
>> are defined in xksxceiver.c. As this script is used to test real
>> hardware, the goal here is to keep it as is and only integrate the
>> tests on veth peers into the test_progs framework.
> 
> We're doubling the functionality for no additional benefits? Or the
> benefit of this set would be the veth xsk tests execution within BPF CI?
> 

Yes the benefit would be the tests execution within BPF CI.

>> Three tests are flaky on s390 so they won't be integrated to test_progs
>> yet (I'm currently trying to make them more robust).
>>
>> PATCH 1 & 2 fix some small issues xskxceiver.c
>> PATCH 3 to 9 rework the xskxceiver to ease the integration in the
>> test_progs framework. Two main points are addressed in them :
>>   - wrap kselftest calls behind macros to ease their replacement later
>>   - handle all errors to release resources instead of calling exit() when
>>     any error occurs.
>> PATCH 10 extracts test_xsk[.c/.h] from xskxceiver[.c/.h] to make the
>> tests available to test_progs
>> PATCH 11 enables kselftest de-activation
>> PATCH 12 isolates the flaky tests
>> PATCH 13 integrate the non-flaky tests to the test_progs framework
> 
> I didn't bisect but this set breaks the HW tests for me which *is* what we
> care about. I'll dig onto that on monday and will get back to you.
> 

Ok, thank you. Can you tell me what hardware you use please ? If by any 
chance I have the same HW somewhere in my office, I can try to reproduce 
on my side.


Best regards,
Bastien