public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support
@ 2024-07-02  5:59 Tushar Vyavahare
  2024-07-02  5:59 ` [PATCH bpf-next v3 1/2] selftests/xsk: Ensure traffic validation proceeds after ring size adjustment in xskxceiver Tushar Vyavahare
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Tushar Vyavahare @ 2024-07-02  5:59 UTC (permalink / raw)
  To: bpf
  Cc: netdev, bjorn, magnus.karlsson, maciej.fijalkowski,
	jonathan.lemon, davem, kuba, pabeni, ast, daniel,
	tirthendu.sarkar, tushar.vyavahare

This patch series introduces enhancements to xsk selftests, focusing on
dynamic batch size configurations and robust traffic validation.

v1->v2:
- Correctly bind UMEM queue sizes to TX and RX queues for standard
  operational alignment.
- Set cfg.rx_size directly from umem->fill_size when umem->fill_size is
  true, ensuring alignment with test specifications.

v2->v3:
- Update commit messages and cover letter for clarity and precision in
  documentation.

Patch series summary:

Patch 1/2: Robust traffic validation post-ring size adjustment

- Fixed the flow in HW_SW_MIN_RING_SIZE and HW_SW_MAX_RING_SIZE test cases
  to validate Tx/Rx traffic by checking the return value of
  set_ring_size(), preventing premature test termination.

Patch 2/2: Dynamic batch size configuration

- Overcomes the 2K batch size limit by introducing dynamic adjustments for
  fill_size and comp_size.
- Update HW_SW_MAX_RING_SIZE test case that evaluates the maximum ring
  sizes for AF_XDP, ensuring its reliability under maximum ring utilization.

Ensure the xsk selftests patches improve overall reliability and
efficiency, allowing the system to handle larger batch sizes and
effectively validate traffic after configuration changes.

Tushar Vyavahare (2):
  selftests/xsk: Ensure traffic validation proceeds after ring size
    adjustment in xskxceiver
  selftests/xsk: Enhance batch size support with dynamic configurations

 tools/testing/selftests/bpf/xskxceiver.c | 40 +++++++++++++++++-------
 tools/testing/selftests/bpf/xskxceiver.h |  2 ++
 2 files changed, 31 insertions(+), 11 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH bpf-next v3 1/2] selftests/xsk: Ensure traffic validation proceeds after ring size adjustment in xskxceiver
  2024-07-02  5:59 [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support Tushar Vyavahare
@ 2024-07-02  5:59 ` Tushar Vyavahare
  2024-07-02  5:59 ` [PATCH bpf-next v3 2/2] selftests/xsk: Enhance batch size support with dynamic configurations Tushar Vyavahare
  2024-07-02 13:20 ` [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Tushar Vyavahare @ 2024-07-02  5:59 UTC (permalink / raw)
  To: bpf
  Cc: netdev, bjorn, magnus.karlsson, maciej.fijalkowski,
	jonathan.lemon, davem, kuba, pabeni, ast, daniel,
	tirthendu.sarkar, tushar.vyavahare

Previously, HW_SW_MIN_RING_SIZE and HW_SW_MAX_RING_SIZE test cases were
not validating Tx/Rx traffic at all due to early return after changing HW
ring size in testapp_validate_traffic().

Fix the flow by checking return value of set_ring_size() and act upon it
rather than terminating the test case there.

Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: Tushar Vyavahare <tushar.vyavahare@intel.com>
---
 tools/testing/selftests/bpf/xskxceiver.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/bpf/xskxceiver.c b/tools/testing/selftests/bpf/xskxceiver.c
index 2eac0895b0a1..088df53869e8 100644
--- a/tools/testing/selftests/bpf/xskxceiver.c
+++ b/tools/testing/selftests/bpf/xskxceiver.c
@@ -1899,11 +1899,15 @@ static int testapp_validate_traffic(struct test_spec *test)
 	}
 
 	if (test->set_ring) {
-		if (ifobj_tx->hw_ring_size_supp)
-			return set_ring_size(ifobj_tx);
-
-	ksft_test_result_skip("Changing HW ring size not supported.\n");
-	return TEST_SKIP;
+		if (ifobj_tx->hw_ring_size_supp) {
+			if (set_ring_size(ifobj_tx)) {
+				ksft_test_result_skip("Failed to change HW ring size.\n");
+				return TEST_FAILURE;
+			}
+		} else {
+			ksft_test_result_skip("Changing HW ring size not supported.\n");
+			return TEST_SKIP;
+		}
 	}
 
 	xsk_attach_xdp_progs(test, ifobj_rx, ifobj_tx);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH bpf-next v3 2/2] selftests/xsk: Enhance batch size support with dynamic configurations
  2024-07-02  5:59 [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support Tushar Vyavahare
  2024-07-02  5:59 ` [PATCH bpf-next v3 1/2] selftests/xsk: Ensure traffic validation proceeds after ring size adjustment in xskxceiver Tushar Vyavahare
@ 2024-07-02  5:59 ` Tushar Vyavahare
  2024-07-02 13:20 ` [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Tushar Vyavahare @ 2024-07-02  5:59 UTC (permalink / raw)
  To: bpf
  Cc: netdev, bjorn, magnus.karlsson, maciej.fijalkowski,
	jonathan.lemon, davem, kuba, pabeni, ast, daniel,
	tirthendu.sarkar, tushar.vyavahare

Introduce dynamic adjustment capabilities for fill_size and comp_size
parameters to support larger batch sizes beyond the previous 2K limit.

Update HW_SW_MAX_RING_SIZE test cases to evaluate AF_XDP's robustness by
pushing hardware and software ring sizes to their limits. This test
ensures AF_XDP's reliability amidst potential producer/consumer throttling
due to maximum ring utilization.

Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Signed-off-by: Tushar Vyavahare <tushar.vyavahare@intel.com>
---
 tools/testing/selftests/bpf/xskxceiver.c | 26 ++++++++++++++++++------
 tools/testing/selftests/bpf/xskxceiver.h |  2 ++
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/bpf/xskxceiver.c b/tools/testing/selftests/bpf/xskxceiver.c
index 088df53869e8..8144fd145237 100644
--- a/tools/testing/selftests/bpf/xskxceiver.c
+++ b/tools/testing/selftests/bpf/xskxceiver.c
@@ -196,6 +196,12 @@ static int xsk_configure_umem(struct ifobject *ifobj, struct xsk_umem_info *umem
 	};
 	int ret;
 
+	if (umem->fill_size)
+		cfg.fill_size = umem->fill_size;
+
+	if (umem->comp_size)
+		cfg.comp_size = umem->comp_size;
+
 	if (umem->unaligned_mode)
 		cfg.flags |= XDP_UMEM_UNALIGNED_CHUNK_FLAG;
 
@@ -265,6 +271,10 @@ static int __xsk_configure_socket(struct xsk_socket_info *xsk, struct xsk_umem_i
 		cfg.bind_flags |= XDP_SHARED_UMEM;
 	if (ifobject->mtu > MAX_ETH_PKT_SIZE)
 		cfg.bind_flags |= XDP_USE_SG;
+	if (umem->comp_size)
+		cfg.tx_size = umem->comp_size;
+	if (umem->fill_size)
+		cfg.rx_size = umem->fill_size;
 
 	txr = ifobject->tx_on ? &xsk->tx : NULL;
 	rxr = ifobject->rx_on ? &xsk->rx : NULL;
@@ -1616,7 +1626,7 @@ static void xsk_populate_fill_ring(struct xsk_umem_info *umem, struct pkt_stream
 	if (umem->num_frames < XSK_RING_PROD__DEFAULT_NUM_DESCS)
 		buffers_to_fill = umem->num_frames;
 	else
-		buffers_to_fill = XSK_RING_PROD__DEFAULT_NUM_DESCS;
+		buffers_to_fill = umem->fill_size;
 
 	ret = xsk_ring_prod__reserve(&umem->fq, buffers_to_fill, &idx);
 	if (ret != buffers_to_fill)
@@ -2445,7 +2455,7 @@ static int testapp_hw_sw_min_ring_size(struct test_spec *test)
 
 static int testapp_hw_sw_max_ring_size(struct test_spec *test)
 {
-	u32 max_descs = XSK_RING_PROD__DEFAULT_NUM_DESCS * 2;
+	u32 max_descs = XSK_RING_PROD__DEFAULT_NUM_DESCS * 4;
 	int ret;
 
 	test->set_ring = true;
@@ -2453,7 +2463,8 @@ static int testapp_hw_sw_max_ring_size(struct test_spec *test)
 	test->ifobj_tx->ring.tx_pending = test->ifobj_tx->ring.tx_max_pending;
 	test->ifobj_tx->ring.rx_pending  = test->ifobj_tx->ring.rx_max_pending;
 	test->ifobj_rx->umem->num_frames = max_descs;
-	test->ifobj_rx->xsk->rxqsize = max_descs;
+	test->ifobj_rx->umem->fill_size = max_descs;
+	test->ifobj_rx->umem->comp_size = max_descs;
 	test->ifobj_tx->xsk->batch_size = XSK_RING_PROD__DEFAULT_NUM_DESCS;
 	test->ifobj_rx->xsk->batch_size = XSK_RING_PROD__DEFAULT_NUM_DESCS;
 
@@ -2461,9 +2472,12 @@ static int testapp_hw_sw_max_ring_size(struct test_spec *test)
 	if (ret)
 		return ret;
 
-	/* Set batch_size to 4095 */
-	test->ifobj_tx->xsk->batch_size = max_descs - 1;
-	test->ifobj_rx->xsk->batch_size = max_descs - 1;
+	/* Set batch_size to 8152 for testing, as the ice HW ignores the 3 lowest bits when
+	 * updating the Rx HW tail register.
+	 */
+	test->ifobj_tx->xsk->batch_size = test->ifobj_tx->ring.tx_max_pending - 8;
+	test->ifobj_rx->xsk->batch_size = test->ifobj_tx->ring.tx_max_pending - 8;
+	pkt_stream_replace(test, max_descs, MIN_PKT_SIZE);
 	return testapp_validate_traffic(test);
 }
 
diff --git a/tools/testing/selftests/bpf/xskxceiver.h b/tools/testing/selftests/bpf/xskxceiver.h
index 906de5fab7a3..885c948c5d83 100644
--- a/tools/testing/selftests/bpf/xskxceiver.h
+++ b/tools/testing/selftests/bpf/xskxceiver.h
@@ -80,6 +80,8 @@ struct xsk_umem_info {
 	void *buffer;
 	u32 frame_size;
 	u32 base_addr;
+	u32 fill_size;
+	u32 comp_size;
 	bool unaligned_mode;
 };
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support
  2024-07-02  5:59 [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support Tushar Vyavahare
  2024-07-02  5:59 ` [PATCH bpf-next v3 1/2] selftests/xsk: Ensure traffic validation proceeds after ring size adjustment in xskxceiver Tushar Vyavahare
  2024-07-02  5:59 ` [PATCH bpf-next v3 2/2] selftests/xsk: Enhance batch size support with dynamic configurations Tushar Vyavahare
@ 2024-07-02 13:20 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-07-02 13:20 UTC (permalink / raw)
  To: Tushar Vyavahare
  Cc: bpf, netdev, bjorn, magnus.karlsson, maciej.fijalkowski,
	jonathan.lemon, davem, kuba, pabeni, ast, daniel,
	tirthendu.sarkar

Hello:

This series was applied to bpf/bpf-next.git (master)
by Daniel Borkmann <daniel@iogearbox.net>:

On Tue,  2 Jul 2024 05:59:14 +0000 you wrote:
> This patch series introduces enhancements to xsk selftests, focusing on
> dynamic batch size configurations and robust traffic validation.
> 
> v1->v2:
> - Correctly bind UMEM queue sizes to TX and RX queues for standard
>   operational alignment.
> - Set cfg.rx_size directly from umem->fill_size when umem->fill_size is
>   true, ensuring alignment with test specifications.
> 
> [...]

Here is the summary with links:
  - [bpf-next,v3,1/2] selftests/xsk: Ensure traffic validation proceeds after ring size adjustment in xskxceiver
    https://git.kernel.org/bpf/bpf-next/c/d80d61ab0609
  - [bpf-next,v3,2/2] selftests/xsk: Enhance batch size support with dynamic configurations
    https://git.kernel.org/bpf/bpf-next/c/e4a195e2b95e

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-07-02 13:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-02  5:59 [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support Tushar Vyavahare
2024-07-02  5:59 ` [PATCH bpf-next v3 1/2] selftests/xsk: Ensure traffic validation proceeds after ring size adjustment in xskxceiver Tushar Vyavahare
2024-07-02  5:59 ` [PATCH bpf-next v3 2/2] selftests/xsk: Enhance batch size support with dynamic configurations Tushar Vyavahare
2024-07-02 13:20 ` [PATCH bpf-next v3 0/2] selftests/xsk: Enhance traffic validation and batch size support patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox