Hi, Olivier, I realized that if local cache for the mempool is enabled and greater than 0, if, say, the mempool size is X and local cache length is Y (and it is not empty,Y>0) an attempt to allocate a bulk, whose size is greater than local cache size (max) and greater than X-Y (which is the number of entries in the ring) will fail. The reason is: __mempool_get_bulk will check whether the bulk to be allocated is greater than mp->cache_size and will fall to ring_dequeue. And the ring does not contain enough entries in this case while the sum of ring entries + cache length may be greater or equal to the bulk's size, so theoretically the bulk could be allocated. Is it an expected behaviour? Am I missing something? By the way, rte_mempool_count returns a ring count + sum of all local caches, IMHO it could mislead, even twice. Regards, Vadim.
On Wed, Mar 4, 2015 at 10:54 AM, Olivier MATZ <olivier.matz at 6wind.com> wrote: > Hi Vadim, > > On 02/27/2015 06:09 PM, Vadim Suraev wrote: > >> >Indeed, this function looks useful, and I also have a work in progress >> >on this topic, but currently it is not well tested. >> I'm sorry, I didn't know. I'll not interfere with my patch)) >> > > That not what I wanted to say :) > > You are very welcome with your patch, I just wanted to notify > that I am also working in the same area and that's why I listed > the things I'm currently working on. > > > >About the inlining, I have no objection now, although Stephen may be >> >right. I think we can consider un-inline some functions, based on >> >performance measurements. >> I've also noticed in many cases it makes no difference. Seems to be some >> trade-off. >> >> >- clarify the difference between raw_alloc/raw_free and >> > mempool_get/mempool_put: For instance, I think that the reference >> > counter initialization should be managed by rte_pktmbuf_reset() like >> > the rest of the fields, therefore raw_alloc/raw_free could be replaced >> It looks useful to me since not all of the fields are used in every >> particular application so >> if the allocation is decoupled from reset, one can save some cycles. >> > > Yes, this is also a trade-off between maintainability and speed, and > speed is probably the first constraint for the dpdk. But maybe we can > find an alternative that is both fast and maintainable. > > Thanks, > Olivier > >