DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Morten Brørup" <mb@smartsharesystems.com>
To: "Bruce Richardson" <bruce.richardson@intel.com>
Cc: <dev@dpdk.org>
Subject: RE: Intel i40e rx burst API non-conformance?
Date: Wed, 9 Jul 2025 18:09:27 +0200	[thread overview]
Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9FDAC@smartserver.smartshare.dk> (raw)
In-Reply-To: <aG6Kmun_ibhZsL3K@bricha3-mobl1.ger.corp.intel.com>

> From: Bruce Richardson [mailto:bruce.richardson@intel.com]
> Sent: Wednesday, 9 July 2025 17.28
> 
> On Wed, Jul 09, 2025 at 04:59:51PM +0200, Morten Brørup wrote:
> > Looking at the i40e driver source code, I think it doesn't conform to
> the API when requesting small bursts.
> >
> > Let's say the hardware has received 31 packets.
> > rte_eth_rx_burst(...,16) will return 16 packets and leave 15 in the
> driver's staging buffer (which has capacity for 32 packets).
> >
> > Time passes, and more packets are received.
> >
> > Now, rte_eth_rx_burst(...,16) will only return the 15 packets from the
> staging buffer, and not proceed to check for more [1].
> > It thereby (according to my interpretation of the API description)
> informs the application that no more packets are ready to be received,
> which is incorrect.
> >
> 
> Again, the spec is not entirely clear. I would partially agree with you
> and
> partially disagree, but overall, it's probably not the best behaviour
> here.

I think that the non-conformant behavior only applies to requests for less than 32 packets.
(Maybe also for requests for numbers of packets that are not divisible by 32.)
Not for requests for 32, 64 or 128 packets.

> 
> Rather than informing the app that there are no more packets, I would
> say
> instead that it incorrectly informs the app that the descriptor ring is
> not
> potentially overloaded. The reason for the difference is that, even in
> the
> case of a driver correctly returning any number of packets, by the time
> the
> function returns there could always be more in the ring. Where the real
> risk, IMHO, is that you could miss out on a ring filling up without
> being
> aware of it, because a full burst is a warning sign of overload.

I agree with your clarification of the meaning of the returned value.

This is also how our application interprets the response:
Non-full burst = "work done, normal scheduling",
Full burst = "more work potentially pending, urgent scheduling".

> 
> /Bruce
> 
> > [1]: https://elixir.bootlin.com/dpdk/v25.07-
> rc2/source/drivers/net/intel/i40e/i40e_rxtx.c#L640
> >
> > PS: I stumbled across this while reviewing how the very old 32 packet
> limit bugs (where it truncated large rx/tx requests to 32 packets) had
> been fixed.
> >

      reply	other threads:[~2025-07-09 16:09 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-09 14:59 Morten Brørup
2025-07-09 15:28 ` Bruce Richardson
2025-07-09 16:09   ` Morten Brørup [this message]

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=98CBD80474FA8B44BF855DF32C47DC35E9FDAC@smartserver.smartshare.dk \
    --to=mb@smartsharesystems.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    /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).