[PATCH v2 3/6] dts: add PMD RSS hash testsuite
Patrick Robb
probb at iol.unh.edu
Mon Apr 14 05:30:42 CEST 2025
On Tue, Feb 25, 2025 at 10:34 AM Thomas Wilks <thomas.wilks at arm.com> wrote:
> From: Alex Chapman <alex.chapman at arm.com>
>
> Port over the pmd_rss_hash test suite from old DTS. This
> suite verifies that the 4 supported types of hashing
> algorithm used in Receive Side Scaling (RSS) function
> correctly. Them being DEFAULT, TOEPLITZ
> SYMMETRIC_TOEPLITZ and SIMPLE_XOR. This test suite also
> verifies the supported hashing algorithms reported by
> the NIC are correct.
>
> Signed-off-by: Alex Chapman <alex.chapman at arm.com>
> Signed-off-by: Thomas Wilks <thomas.wilks at arm.com>
>
> Reviewed-by: Paul Szczepanek <paul.szczepanek at arm.com>
> ---
> dts/tests/TestSuite_pmd_rss_hash.py | 118 ++++++++++++++++++++++++++++
> 1 file changed, 118 insertions(+)
> create mode 100644 dts/tests/TestSuite_pmd_rss_hash.py
>
> diff --git a/dts/tests/TestSuite_pmd_rss_hash.py
> b/dts/tests/TestSuite_pmd_rss_hash.py
> new file mode 100644
> index 0000000000..d21e33456e
> --- /dev/null
> +++ b/dts/tests/TestSuite_pmd_rss_hash.py
> @@ -0,0 +1,118 @@
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2025 Arm Limited
> +
> +"""RSS Hash testing suite.
> +
> +Hashing algorithms are used in conjunction with a RSS hash keys to hash
> packets.
> +This test suite verifies that updating the Hashing algorithms will
> +continue to correctly hash packets.
> +
> +Symmetric_toeplitz_sort hasn't been included due to it not being
> supported by
> +the rss func actions in the flow rule.
> +"""
> +
> +from framework.remote_session.testpmd_shell import FlowRule, TestPmdShell
> +from framework.test_suite import TestSuite, func_test
> +from framework.testbed_model.capability import NicCapability, requires
> +from framework.testbed_model.topology import TopologyType
> +from framework.utils import StrEnum
> +
> +from .pmd_rss_utils import ( # type: ignore[import-untyped]
> + SendTestPackets,
> + SetupRssEnvironment,
> + VerifyHashQueue,
> +)
> +
> +NUM_QUEUES = 16
> +
> +
> +class HashAlgorithm(StrEnum):
> + """Enum of hashing algorithms."""
> +
> + DEFAULT = "default"
> + SIMPLE_XOR = "simple_xor"
> + TOEPLITZ = "toeplitz"
> + SYMMETRIC_TOEPLITZ = "symmetric_toeplitz"
> +
> +
> + at requires(topology_type=TopologyType.one_link)
> +class TestPmdRssHash(TestSuite):
> + """PMD RSS Hash test suite.
> +
> + Verifies the redirection table when updating the size.
> + The suite contains four tests, one for each hash algorithms.
> + """
> +
> + def VerifyHashFunction(self, hash_algorithm: HashAlgorithm) -> None:
> + """Verifies the hash function is supported by the NIC.
> +
> + Args:
> + hash_algorithm: The hash algorithm to be tested.
> + """
> + is_symmetric = hash_algorithm == HashAlgorithm.SYMMETRIC_TOEPLITZ
> + # Build flow rule
> + flow_rule = FlowRule(
> + group_id=0,
> + direction="ingress",
> + pattern=["eth / ipv4 / udp"],
> + actions=[f"rss types ipv4-udp end queues end func
> {str(hash_algorithm).lower()}"],
> + )
> +
> + # Run the key update test suite with an asymmetric hash algorithm
> + with TestPmdShell(
> + rx_queues=NUM_QUEUES,
> + tx_queues=NUM_QUEUES,
> + ) as testpmd:
> + # Setup testpmd environment for RSS, create RETA table,
> return RETA table and key_size
> + reta, _ = SetupRssEnvironment(self, testpmd, NUM_QUEUES,
> flow_rule)
> + # Send udp packets and ensure hash corresponds with queue
> + parsed_output = SendTestPackets(self, testpmd, is_symmetric)
> + VerifyHashQueue(self, reta, parsed_output, is_symmetric)
> +
> + @func_test
> + def TestDefaultHashAlgorithm(self) -> None:
> + """Default hashing algorithm test.
> +
> + Steps:
> + Setup RSS environment using the default RSS hashing algorithm
> + and send test packets.
> + Verify:
> + Packet hash corresponds to the packet queue.
> + """
> + self.VerifyHashFunction(HashAlgorithm.DEFAULT)
> +
> + @func_test
> + def TestToeplitzHashAlgorithm(self) -> None:
> + """Toeplitz hashing algorithm test.
> +
> + Steps:
> + Setup RSS environment using the toeplitz RSS hashing
> algorithm and send test packets.
> + Verify:
> + Packet hash corresponds to the packet queue.
> + """
> + self.VerifyHashFunction(HashAlgorithm.TOEPLITZ)
> +
> + @func_test
> + def TestSymmetricToeplitzHashAlgorithm(self) -> None:
> + """Symmetric toeplitz hashing algorithm test.
> +
> + Steps:
> + Setup RSS environment using the symmetric_toeplitz RSS
> hashing algorithm
> + and send test packets.
> + Verify:
> + Packet hash corresponds to the packet queue.
> + """
> + self.VerifyHashFunction(HashAlgorithm.SYMMETRIC_TOEPLITZ)
> +
> + @requires(NicCapability.XOR_SUPPORT)
> + @func_test
> + def TestSimpleXorHashAlgorithm(self) -> None:
> + """Simple xor hashing algorithm test.
> +
> + Steps:
> + Setup RSS environment using the simple xor RSS hashing
> algorithm
> + and send test packets.
> + Verify:
> + Packet hash corresponds to the packet queue.
> + """
> + self.VerifyHashFunction(HashAlgorithm.SIMPLE_XOR)
> --
> 2.43.0
>
>
The testsuite looks good although the functions need to move to snake style
naming convention.
Tested on an Intel XL710, which skipped all but the default hash algorithm
(passing).
Reviewed-by: Patrick Robb <probb at iol.unh.edu>
Tested-by: Patrick Robb <probb at iol.unh.eu>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20250413/7928d9ca/attachment.htm>
More information about the dev
mailing list