DPDK patches and discussions
 help / color / mirror / Atom feed
From: Patrick Robb <probb@iol.unh.edu>
To: Thomas Wilks <thomas.wilks@arm.com>
Cc: dev@dpdk.org, Paul Szczepanek <paul.szczepanek@arm.com>,
	 Luca Vizzarro <luca.vizzarro@arm.com>,
	Alex Chapman <alex.chapman@arm.com>
Subject: Re: [PATCH v2 3/6] dts: add PMD RSS hash testsuite
Date: Sun, 13 Apr 2025 23:30:42 -0400	[thread overview]
Message-ID: <CAJvnSUC9yph2ZN3CG1N-F6ckB3XmZSKNBaS+=D4evwnjo+gzUw@mail.gmail.com> (raw)
In-Reply-To: <20250225153345.331216-4-thomas.wilks@arm.com>

[-- Attachment #1: Type: text/plain, Size: 5879 bytes --]

On Tue, Feb 25, 2025 at 10:34 AM Thomas Wilks <thomas.wilks@arm.com> wrote:

> From: Alex Chapman <alex.chapman@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@arm.com>
> Signed-off-by: Thomas Wilks <thomas.wilks@arm.com>
>
> Reviewed-by: Paul Szczepanek <paul.szczepanek@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"
> +
> +
> +@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@iol.unh.edu>
Tested-by: Patrick Robb <probb@iol.unh.eu>

[-- Attachment #2: Type: text/html, Size: 7532 bytes --]

  reply	other threads:[~2025-04-14  3:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-29 12:50 [PATCH] dts: add RSS functions to testpmd Alex Chapman
2024-09-06 14:29 ` Juraj Linkeš
2025-02-25 15:33 ` [PATCH v2 0/6] Added RSS functions and tests Thomas Wilks
2025-02-25 15:33   ` [PATCH v2 1/6] dts: add RSS functions to testpmd Thomas Wilks
2025-04-14  3:11     ` Patrick Robb
2025-02-25 15:33   ` [PATCH v2 2/6] dts: add utils for PMD RSS testsuites Thomas Wilks
2025-04-14  3:11     ` Patrick Robb
2025-02-25 15:33   ` [PATCH v2 3/6] dts: add PMD RSS hash testsuite Thomas Wilks
2025-04-14  3:30     ` Patrick Robb [this message]
2025-02-25 15:33   ` [PATCH v2 4/6] dts: add PMD RSS RETA testsuite Thomas Wilks
2025-02-25 15:33   ` [PATCH v2 5/6] dts: add PMD RSS key update testsuite Thomas Wilks
2025-02-25 15:33   ` [PATCH v2 6/6] dts: add NIC capabilities for hash algorithms Thomas Wilks

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJvnSUC9yph2ZN3CG1N-F6ckB3XmZSKNBaS+=D4evwnjo+gzUw@mail.gmail.com' \
    --to=probb@iol.unh.edu \
    --cc=alex.chapman@arm.com \
    --cc=dev@dpdk.org \
    --cc=luca.vizzarro@arm.com \
    --cc=paul.szczepanek@arm.com \
    --cc=thomas.wilks@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).