DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jeremy Spewock <jspewock@iol.unh.edu>
To: "Juraj Linkeš" <juraj.linkes@pantheon.tech>
Cc: Honnappa.Nagarahalli@arm.com, thomas@monjalon.net,
	 wathsala.vithanage@arm.com, probb@iol.unh.edu,
	paul.szczepanek@arm.com,  yoan.picchi@foss.arm.com,
	lylavoie@iol.unh.edu, ferruh.yigit@amd.com,
	 andrew.rybchenko@oktetlabs.ru, dev@dpdk.org
Subject: Re: [PATCH v6 7/7] dts: add pmd_buffer_scatter test suite
Date: Mon, 8 Jan 2024 11:53:32 -0500	[thread overview]
Message-ID: <CAAA20USz2+U3M4=HAU04tNqCsTRM1O88y0w1aSTr5tqKRf2iBg@mail.gmail.com> (raw)
In-Reply-To: <CAOb5WZa8fzQZ9S=OXRYSmnA+dpGpxE-WbuvxdWM8DuuqS-PEbw@mail.gmail.com>

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

On Mon, Jan 8, 2024 at 10:47 AM Juraj Linkeš <juraj.linkes@pantheon.tech>
wrote:

> On Wed, Jan 3, 2024 at 11:33 PM <jspewock@iol.unh.edu> wrote:
> >
> > From: Jeremy Spewock <jspewock@iol.unh.edu>
> >
> > This test suite provides testing of the support of scattered packets by
> > Poll Mode Drivers using testpmd, verifying the ability to receive and
> > transmit scattered multi-segment packets made up of multiple
> > non-contiguous memory buffers. This is tested through 5 different cases
> > in which the length of the packets sent are less than the mbuf size,
> > equal to the mbuf size, and 1, 4, and 5 bytes greater than the mbuf size
> > in order to show both the CRC and the packet data are capable of
> > existing in the first, second, or both buffers.
> >
> > Naturally, if the PMD is capable of forwarding scattered packets which
> > it receives as input, this shows it is capable of both receiving and
> > transmitting scattered packets.
> >
> > Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu>
> > ---
> >  dts/tests/TestSuite_pmd_buffer_scatter.py | 126 ++++++++++++++++++++++
> >  1 file changed, 126 insertions(+)
> >  create mode 100644 dts/tests/TestSuite_pmd_buffer_scatter.py
> >
> > diff --git a/dts/tests/TestSuite_pmd_buffer_scatter.py
> b/dts/tests/TestSuite_pmd_buffer_scatter.py
> > new file mode 100644
> > index 0000000000..8838c3404f
> > --- /dev/null
> > +++ b/dts/tests/TestSuite_pmd_buffer_scatter.py
> > @@ -0,0 +1,126 @@
> > +# SPDX-License-Identifier: BSD-3-Clause
> > +# Copyright(c) 2023-2024 University of New Hampshire
> > +
> > +"""Multi-segment packet scattering testing suite.
>
> Test suite - I guess this is a copy-paste?
>

Good catch, it probably was.


> > +
> > +This testing suite tests the support of transmitting and receiving
> scattered packets. This is shown
> > +by the Poll Mode Driver being able to forward scattered multi-segment
> packets composed of multiple
> > +non-contiguous memory buffers. To ensure the receipt of scattered
> packets, the DMA rings of the
> > +port's RX queues must be configured with mbuf data buffers whose size
> is less than the maximum
> > +length.
> > +
> > +If it is the case that the Poll Mode Driver can forward scattered
> packets which it receives, then
> > +this suffices to show the Poll Mode Driver is capable of both receiving
> and transmitting scattered
> > +packets.
> > +"""
>
> We have a newline between the docstring and the import everywhere.
>

You're right, I must have missed it here, I'll add that.


> > +import struct
> > +
> > +from scapy.layers.inet import IP  # type: ignore[import]
> > +from scapy.layers.l2 import Ether  # type: ignore[import]
> > +from scapy.packet import Raw  # type: ignore[import]
> > +from scapy.utils import hexstr  # type: ignore[import]
> > +
> > +from framework.remote_session.testpmd_shell import
> TestPmdForwardingModes, TestPmdShell
> > +from framework.test_suite import TestSuite
> > +
> > +
> > +class PmdBufferScatter(TestSuite):
> > +    """DPDK PMD packet scattering test suite.
> > +
> > +    Configure the Rx queues to have mbuf data buffers whose sizes are
> smaller than the maximum
> > +    packet size. Specifically, set mbuf data buffers to have a size of
> 2048 to fit a full 1512-byte
> > +    (CRC included) ethernet frame in a mono-segment packet. The testing
> of scattered packets is
> > +    done by sending a packet whose length is greater than the size of
> the configured size of mbuf
> > +    data buffers. There are a total of 5 packets sent within test cases
> which have lengths less
> > +    than, equal to, and greater than the mbuf size. There are multiple
> packets sent with lengths
> > +    greater than the mbuf size in order to test cases such as:
> > +
> > +    1. A single byte of the CRC being in a second buffer while the
> remaining 3 bytes are stored in
> > +        the first buffer alongside packet data.
> > +    2. The entire CRC being stored in a second buffer while all of the
> packet data is stored in the
> > +        first.
> > +    3. Most of the packet data being stored in the first buffer and a
> single byte of packet data
> > +        stored in a second buffer alongside the CRC.
> > +    """
> > +
> > +    def set_up_suite(self) -> None:
> > +        """Set up the test suite.
> > +
> > +        Setup:
> > +            Verify they we have at least 2 port links in the current
> execution and increase the MTU
>
> Typo - they.
>

Oops, thank you!


>
> > +            of both ports on the tg_node to 9000 to support larger
> packet sizes.
>
> The description should be code agnostic, so let's use traffic
> generator node instead of tg_node.
>

Good point, I'll update this.


>
> > +        """
> > +        self.verify(
> > +            len(self._port_links) > 1,
> > +            "Must have at least two port links to run scatter",
>
> I'd like this to be at least "Must have at least two port links to run
> the scatter test suite" so that it's immediately obvious where this
> comes from. I'm also debating which of these is better: "Must have at
> least" or "There must be at least", but I'm not sure.
>

I think reading it over that "There must be at least" sounds better, I'll
update this as well.


>
> > +        )
> > +
> > +        self.tg_node.main_session.configure_port_mtu(9000,
> self._tg_port_egress)
> > +        self.tg_node.main_session.configure_port_mtu(9000,
> self._tg_port_ingress)
> > +
> > +    def scatter_pktgen_send_packet(self, pktsize: int) -> str:
> > +        """Generate and send packet to the SUT.
>
> send a packet
>
> But this also captures a packet, so let's mention that.
>

Good point, I'll add this.


>
> > +
> > +        Functional test for scatter packets.
>
> This is just part of the test. The actual test is the pmd_scatter
> method with test cases being the callers of pmd_scatter.
> We should improve this. We mentioned a packet, so let's describe it.
>

This definitely could be expanded, this likely just came from pulling from
old DTS or before the docstrings were expanded. Good catch!


>
> > +
> > +        Args:
> > +            pktsize: Size of the packet to generate and send.
> > +        """
> > +        packet = Ether() / IP() / Raw()
> > +        packet.getlayer(2).load = ""
> > +        payload_len = pktsize - len(packet) - 4
> > +        payload = ["58"] * payload_len
> > +        # pack the payload
> > +        for X_in_hex in payload:
> > +            packet.load += struct.pack("=B", int("%s%s" % (X_in_hex[0],
> X_in_hex[1]), 16))
> > +        received_packets = self.send_packet_and_capture(packet)
> > +        self.verify(len(received_packets) > 0, "Did not receive any
> packets.")
> > +        load = hexstr(received_packets[0].getlayer(2), onlyhex=1)
> > +
> > +        return load
> > +
> > +    def pmd_scatter(self, mbsize: int) -> None:
> > +        """Testpmd support of receiving and sending scattered
> multi-segment packets.
> > +
> > +        Support for scattered packets is shown by sending 5 packets of
> differing length
> > +        where the length of the packet is calculated by taking
> mbuf-size + an offset. The
> > +        offsets used in the test case are -1, 0, 1, 4, 5 respectively.
> > +
>
> In the test.
>

Good point, I'll change this.


>
> > +        Test:
> > +            Start testpmd and run functional test with preset mbsize.
> > +        """
> > +        testpmd = self.sut_node.create_interactive_shell(
> > +            TestPmdShell,
> > +            app_parameters=(
> > +                "--mbcache=200 "
> > +                f"--mbuf-size={mbsize} "
> > +                "--max-pkt-len=9000 "
> > +                "--port-topology=paired "
> > +                "--tx-offloads=0x00008000"
> > +            ),
> > +            privileged=True,
> > +        )
> > +        testpmd.set_forward_mode(TestPmdForwardingModes.mac)
> > +        testpmd.start()
> > +
> > +        for offset in [-1, 0, 1, 4, 5]:
> > +            recv_payload = self.scatter_pktgen_send_packet(mbsize +
> offset)
> > +            self._logger.debug(f"Payload of scattered packet after
> forwarding: \n{recv_payload}")
> > +            self.verify(
> > +                ("58 " * 8).strip() in recv_payload,
> > +                f"Payload of scattered packet did not match expected
> payload with offset {offset}.",
> > +            )
> > +        testpmd.stop()
> > +
> > +    def test_scatter_mbuf_2048(self) -> None:
> > +        """Run :func:`~PmdBufferScatter.pmd_scatter` function with
> `mbsize` set to 2048."""
>
> This would probably read better as "Run the pmd_scatter test"
>

I agree, I'll update this.


>
> > +        self.pmd_scatter(mbsize=2048)
> > +
> > +    def tear_down_suite(self) -> None:
> > +        """Tear down the test suite.
> > +
> > +        Teardown:
> > +            Set the MTU of the tg_node back to a more standard size of
> 1500
> > +        """
> > +        self.tg_node.main_session.configure_port_mtu(1500,
> self._tg_port_egress)
> > +        self.tg_node.main_session.configure_port_mtu(1500,
> self._tg_port_ingress)
> > --
> > 2.43.0
> >
>

Thank you again for the thorough feedback!

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

  reply	other threads:[~2024-01-08 16:53 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-18 18:12 [PATCH v4 0/7] dts: Port scatter suite over jspewock
2023-12-18 18:12 ` [PATCH v4 1/7] dts: add required methods to testpmd_shell jspewock
2023-12-19 16:45   ` Juraj Linkeš
2023-12-21 19:37     ` Jeremy Spewock
2024-01-03 11:10       ` Juraj Linkeš
2023-12-18 18:12 ` [PATCH v4 2/7] dts: allow passing parameters into interactive apps jspewock
2023-12-19 16:50   ` Juraj Linkeš
2023-12-18 18:12 ` [PATCH v4 3/7] dts: add optional packet filtering to scapy sniffer jspewock
2023-12-19 16:54   ` Juraj Linkeš
2023-12-18 18:12 ` [PATCH v4 4/7] dts: add pci addresses to EAL parameters jspewock
2023-12-19 16:55   ` Juraj Linkeš
2023-12-18 18:12 ` [PATCH v4 5/7] dts: allow configuring MTU of ports jspewock
2023-12-19 16:58   ` Juraj Linkeš
2023-12-18 18:12 ` [PATCH v4 6/7] dts: add scatter to the yaml schema jspewock
2023-12-19 16:59   ` Juraj Linkeš
2023-12-18 18:12 ` [PATCH v4 7/7] dts: add scatter test suite jspewock
2023-12-19 17:29   ` Juraj Linkeš
2023-12-21 21:47     ` Jeremy Spewock
2024-01-03 11:14       ` Juraj Linkeš
2024-01-03 22:12 ` [PATCH v5 0/7] dts: Port scatter suite over jspewock
2024-01-03 22:12   ` [PATCH v5 1/7] dts: add startup verification and forwarding modes to testpmd shell jspewock
2024-01-03 22:12   ` [PATCH v5 2/7] dts: limit EAL parameters to DPDK apps and add parameters to all apps jspewock
2024-01-03 22:12   ` [PATCH v5 3/7] dts: add optional packet filtering to scapy sniffer jspewock
2024-01-03 22:12   ` [PATCH v5 4/7] dts: add pci addresses to EAL parameters jspewock
2024-01-03 22:12   ` [PATCH v5 5/7] dts: allow configuring MTU of ports jspewock
2024-01-03 22:12   ` [PATCH v5 6/7] dts: add scatter to the yaml schema jspewock
2024-01-03 22:12   ` [PATCH v5 7/7] dts: add pmd_buffer_scatter test suite jspewock
2024-01-03 22:31   ` [PATCH v6 0/7] dts: Port scatter suite over jspewock
2024-01-03 22:32     ` [PATCH v6 1/7] dts: add startup verification and forwarding modes to testpmd shell jspewock
2024-01-08 11:34       ` Juraj Linkeš
2024-01-08 16:36         ` Jeremy Spewock
2024-01-09 11:54           ` Juraj Linkeš
2024-01-09 14:31             ` Jeremy Spewock
2024-01-03 22:32     ` [PATCH v6 2/7] dts: limit EAL parameters to DPDK apps and add parameters to all apps jspewock
2024-01-08 11:52       ` Juraj Linkeš
2024-01-08 16:37         ` Jeremy Spewock
2024-01-03 22:32     ` [PATCH v6 3/7] dts: add optional packet filtering to scapy sniffer jspewock
2024-01-08 12:01       ` Juraj Linkeš
2024-01-08 16:39         ` Jeremy Spewock
2024-01-08 16:40           ` Jeremy Spewock
2024-01-03 22:32     ` [PATCH v6 4/7] dts: add pci addresses to EAL parameters jspewock
2024-01-08 14:59       ` Juraj Linkeš
2024-01-03 22:32     ` [PATCH v6 5/7] dts: allow configuring MTU of ports jspewock
2024-01-08 15:00       ` Juraj Linkeš
2024-01-03 22:32     ` [PATCH v6 6/7] dts: add scatter to the yaml schema jspewock
2024-01-08 15:01       ` Juraj Linkeš
2024-01-03 22:32     ` [PATCH v6 7/7] dts: add pmd_buffer_scatter test suite jspewock
2024-01-08 15:47       ` Juraj Linkeš
2024-01-08 16:53         ` Jeremy Spewock [this message]
2024-01-09 15:36     ` [PATCH v7 0/7] dts: Port scatter suite over jspewock
2024-01-09 15:36       ` [PATCH v7 1/7] dts: add startup verification and forwarding modes to testpmd shell jspewock
2024-01-10 13:18         ` Juraj Linkeš
2024-01-10 14:09           ` Jeremy Spewock
2024-01-09 15:36       ` [PATCH v7 2/7] dts: limit EAL parameters to DPDK apps and add parameters to all apps jspewock
2024-01-09 15:36       ` [PATCH v7 3/7] dts: add optional packet filtering to scapy sniffer jspewock
2024-01-09 15:36       ` [PATCH v7 4/7] dts: add pci addresses to EAL parameters jspewock
2024-01-09 15:36       ` [PATCH v7 5/7] dts: allow configuring MTU of ports jspewock
2024-01-09 15:36       ` [PATCH v7 6/7] dts: add scatter to the yaml schema jspewock
2024-01-09 15:36       ` [PATCH v7 7/7] dts: add pmd_buffer_scatter test suite jspewock
2024-01-10 13:16         ` Juraj Linkeš
2024-01-10 14:09           ` Jeremy Spewock
2024-01-10 13:22       ` [PATCH v7 0/7] dts: Port scatter suite over Juraj Linkeš
2024-01-10 14:42       ` [PATCH v8 " jspewock
2024-01-10 14:42         ` [PATCH v8 1/7] dts: add startup verification and forwarding modes to testpmd shell jspewock
2024-01-10 14:42         ` [PATCH v8 2/7] dts: limit EAL parameters to DPDK apps and add parameters to all apps jspewock
2024-01-10 14:42         ` [PATCH v8 3/7] dts: add optional packet filtering to scapy sniffer jspewock
2024-01-10 14:42         ` [PATCH v8 4/7] dts: add pci addresses to EAL parameters jspewock
2024-01-10 14:42         ` [PATCH v8 5/7] dts: allow configuring MTU of ports jspewock
2024-01-10 14:42         ` [PATCH v8 6/7] dts: add scatter to the yaml schema jspewock
2024-01-10 14:42         ` [PATCH v8 7/7] dts: add pmd_buffer_scatter test suite jspewock
2024-01-11 10:07         ` [PATCH v8 0/7] dts: Port scatter suite over Juraj Linkeš
2024-02-21  3:34         ` Patrick Robb
2024-03-07 15:00         ` Thomas Monjalon
2024-03-11 14:15           ` Jeremy Spewock
2024-03-11 15:43         ` [PATCH v9 " jspewock
2024-03-11 15:43           ` [PATCH v9 1/7] dts: add startup verification and forwarding modes to testpmd shell jspewock
2024-03-11 15:44           ` [PATCH v9 2/7] dts: limit EAL parameters to DPDK apps and add parameters to all apps jspewock
2024-03-11 15:44           ` [PATCH v9 3/7] dts: add optional packet filtering to scapy sniffer jspewock
2024-03-11 15:44           ` [PATCH v9 4/7] dts: add pci addresses to EAL parameters jspewock
2024-03-11 15:44           ` [PATCH v9 5/7] dts: allow configuring MTU of ports jspewock
2024-03-11 15:44           ` [PATCH v9 6/7] dts: add scatter to the yaml schema jspewock
2024-03-11 15:44           ` [PATCH v9 7/7] dts: add pmd_buffer_scatter test suite jspewock
2024-03-15 17:41           ` [PATCH v9 0/7] dts: Port scatter suite over Thomas Monjalon

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='CAAA20USz2+U3M4=HAU04tNqCsTRM1O88y0w1aSTr5tqKRf2iBg@mail.gmail.com' \
    --to=jspewock@iol.unh.edu \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@amd.com \
    --cc=juraj.linkes@pantheon.tech \
    --cc=lylavoie@iol.unh.edu \
    --cc=paul.szczepanek@arm.com \
    --cc=probb@iol.unh.edu \
    --cc=thomas@monjalon.net \
    --cc=wathsala.vithanage@arm.com \
    --cc=yoan.picchi@foss.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).