unnecessary rx callbacks when zero packets

Morten Brørup mb at smartsharesystems.com
Mon Jan 8 11:19:42 CET 2024


> From: Honnappa Nagarahalli [mailto:Honnappa.Nagarahalli at arm.com]
> Sent: Sunday, 7 January 2024 21.57
> 
> > From: Stephen Hemminger <stephen at networkplumber.org>
> > Sent: Sunday, January 7, 2024 11:37 AM
> >
> > I noticed while looking at packet capture that currently the receive
> callbacks
> > get called even if there are no packets. This seems unnecessary since
> if nb_rx is
> > zero, then there are no packets to look at.  My one concern is that
> an
> > application could be using callbacks as some form of scheduling
> mechanism
> > which would be broken.
> Is it possible that the call back functions are maintaining statistics
> on zero packet polls?

I agree with this concern. The primary argument for introducing the callbacks (instead of the application simply calling the same functions at RX and TX time) was to provide instrumentation outside of the application itself. And for instrumentation purposes, zero-packet calls may be relevant.

TX also calls its callback with zero packets. The callbacks treatment should be the same for both RX and TX: Either always call, or only call if non-zero packets.

So: NAK.

Perhaps the packet capture library can be optimized for zero packets instead.

> 
> >
> > The change would be:
> >
> >
> > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index
> > 21e3a21903ec..f64bf977c46e 100644
> > --- a/lib/ethdev/rte_ethdev.h
> > +++ b/lib/ethdev/rte_ethdev.h
> > @@ -6077,7 +6077,7 @@ rte_eth_rx_burst(uint16_t port_id, uint16_t
> > queue_id,
> >         nb_rx = p->rx_pkt_burst(qd, rx_pkts, nb_pkts);
> >
> >  #ifdef RTE_ETHDEV_RXTX_CALLBACKS
> > -       {
> > +       if (nb_rx > 0) {
> >                 void *cb;
> >
> >                 /* rte_memory_order_release memory order was used
> when the


More information about the dev mailing list