[dpdk-dev] [PATCH] kni: use bulk functions to allocate and free mbufs

Stephen Hemminger stephen at networkplumber.org
Wed Jan 11 18:35:59 CET 2017


On Wed, 11 Jan 2017 17:28:21 +0000
"Ananyev, Konstantin" <konstantin.ananyev at intel.com> wrote:

> > -----Original Message-----
> > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Stephen Hemminger
> > Sent: Wednesday, January 11, 2017 4:18 PM
> > To: Sergey Vyazmitinov <s.vyazmitinov at brain4net.com>
> > Cc: olivier.matz at 6wind.com; Yigit, Ferruh <ferruh.yigit at intel.com>; dev at dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH] kni: use bulk functions to allocate and free mbufs
> > 
> > On Fri, 30 Dec 2016 04:50:16 +0700
> > Sergey Vyazmitinov <s.vyazmitinov at brain4net.com> wrote:
> >   
> > >  /**
> > > + * Free n packets mbuf back into its original mempool.
> > > + *
> > > + * Free each mbuf, and all its segments in case of chained buffers. Each
> > > + * segment is added back into its original mempool.
> > > + *
> > > + * @param mp
> > > + *   The packets mempool.
> > > + * @param mbufs
> > > + *   The packets mbufs array to be freed.
> > > + * @param n
> > > + *   Number of packets.
> > > + */
> > > +static inline void rte_pktmbuf_free_bulk(struct rte_mempool *mp,
> > > +		struct rte_mbuf **mbufs, unsigned n)
> > > +{
> > > +	struct rte_mbuf *mbuf, *m_next;
> > > +	unsigned i;
> > > +	for (i = 0; i < n; ++i) {
> > > +		mbuf = mbufs[i];
> > > +		__rte_mbuf_sanity_check(mbuf, 1);
> > > +
> > > +		mbuf = mbuf->next;
> > > +		while (mbuf != NULL) {
> > > +			m_next = mbuf->next;
> > > +			rte_pktmbuf_free_seg(mbuf);
> > > +			mbuf = m_next;
> > > +		}
> > > +	}
> > > +	rte_mempool_put_bulk(mp, (void * const *)mbufs, n);
> > > +}  
> > 
> > The mbufs may come from different pools. You need to handle that.  
> 
> I suppose both stituations are possible:
> 1) user knows off-hand that all mbufs in the group are from the same mempool
> 2) user can't guarantee that all mbufs in the group are from same mempool.
> 
> As I understand that patch is for case 1) only.
> For 2) it could be a separate function and separate patch.
> 
> Konstantin
> 
> 

Please don't make unnecessary assumptions in pursuit of minor optimizations.
It is trivial to write a correct free bulk that handles pool changing.
Also the free_seg could be bulked as well.


More information about the dev mailing list