[dpdk-dev] A question about (poor) rte_ethdev internal rx/tx callbacks design

Ananyev, Konstantin konstantin.ananyev at intel.com
Mon Nov 13 11:58:58 CET 2017



> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Adrien Mazarguil
> Sent: Monday, November 13, 2017 10:39 AM
> To: Ilya Matveychikov <matvejchikov at gmail.com>
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] A question about (poor) rte_ethdev internal rx/tx callbacks design
> 
> On Sat, Nov 11, 2017 at 09:18:45PM +0400, Ilya Matveychikov wrote:
> > Folks,
> >
> > Are you serious with it:
> >
> > typedef uint16_t (*eth_rx_burst_t)(void *rxq,
> > 				   struct rte_mbuf **rx_pkts,
> > 				   uint16_t nb_pkts);
> > typedef uint16_t (*eth_tx_burst_t)(void *txq,
> > 				   struct rte_mbuf **tx_pkts,
> > 				   uint16_t nb_pkts);
> >
> > I’m not surprised that every PMD stores port_id in every and each queue as having just the queue as an argument doesn’t allow to get the
> device. So the question is - why not to use something like:
> >
> > typedef uint16_t (*eth_rx_burst_t)(void *dev, uint16_t queue_id,
> > 				   struct rte_mbuf **rx_pkts,
> > 				   uint16_t nb_pkts);
> > typedef uint16_t (*eth_tx_burst_t)(void *dev, uint16_t queue_id,
> > 				   struct rte_mbuf **tx_pkts,
> > 				   uint16_t nb_pkts);
> 
> I assume it's since the rte_eth_[rt]x_burst() wrappers already pay the price
> for that indirection, doing it twice would be redundant.
> 
> Basically the cost of storing a back-pointer to dev or a queue index in each
> Rx/Tx queue structure is minor compared to saving a couple of CPU cycles
> wherever we can.

For many PMDs we don't need that pointer at all to do RX/TX -
information stored inside the queue is sufficient. 
Konstantin

> 
> I'm not saying its the only solution nor the right approach, it's only one
> possible explanation for this API.
> 
> --
> Adrien Mazarguil
> 6WIND


More information about the dev mailing list