[dpdk-dev] [PATCH] ethdev: rte_eth_rx_burst() nb_pktsrequirements

Morten Brørup mb at smartsharesystems.com
Mon Sep 14 14:42:22 CEST 2020


> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Bruce Richardson
> Sent: Monday, September 14, 2020 1:27 PM
> 
> On Mon, Sep 14, 2020 at 01:05:11PM +0200, Morten Brørup wrote:
> > Updated description of rte_eth_rx_burst() to reflect what drivers,
> > when using vector instructions, expect from nb_pkts.
> >
> > Also discussed on the mailing list here:
> >
> http://inbox.dpdk.org/dev/98CBD80474FA8B44BF855DF32C47DC35C61257@smarts
> erver.smartshare.dk/
> >
> > Signed-off-by: Morten Brørup <mb at smartsharesystems.com>
> > ---
> >  lib/librte_ethdev/rte_ethdev.h | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/lib/librte_ethdev/rte_ethdev.h
> b/lib/librte_ethdev/rte_ethdev.h
> > index 70295d7ab..41f8ba4ef 100644
> > --- a/lib/librte_ethdev/rte_ethdev.h
> > +++ b/lib/librte_ethdev/rte_ethdev.h
> > @@ -4469,6 +4469,10 @@ int
> rte_eth_dev_hairpin_capability_get(uint16_t port_id,
> >   * burst-oriented optimizations in both synchronous and asynchronous
> >   * packet processing environments with no overhead in both cases.
> >   *
> > + * @note
> > + *   Some drivers using vector instructions require that *nb_pkts*
> is
> > + *   divisible by 4 or 8, depending on the driver implementation.
> > + *
> 
> Not technically true, in that the drivers will round the value down to
> the
> nearest multiple of 4 or 8. So how about rewording as:
> 
> "Some drivers using vector instructions may round the *nb_pkts* driver
> to
> a multiple of 4 or 8 depending upon the driver implementation."
> 

You are correct about the driver behavior.

However, if you pass nb_pkts=9, the driver will return 8 packets,
and thus it does not conform to the API behavior of returning nb_pkts
if they are there.

This is why the description in this patch differs from the description we reached in the RFC discussion.

> >   * The rte_eth_rx_burst() function does not provide any error
> >   * notification to avoid the corresponding overhead. As a hint, the
> >   * upper-level application might check the status of the device link
> once
> > @@ -4485,6 +4489,7 @@ int rte_eth_dev_hairpin_capability_get(uint16_t
> port_id,
> >   *   must be large enough to store *nb_pkts* pointers in it.
> >   * @param nb_pkts
> >   *   The maximum number of packets to retrieve.
> > + *   The value must be divisible by 8 in order to work with any
> driver.
> 
> Similarly here, I think it's better to state that it should be at least
> 8,
> and any values not divisible by 8 may be rounded down.
> 
> >   * @return
> >   *   The number of packets actually retrieved, which is the number
> >   *   of pointers to *rte_mbuf* structures effectively supplied to
> the
> > --
> > 2.17.1
> >



More information about the dev mailing list