[dpdk-dev] rte_mempool_get_bulk uses either cache or common pool

Olivier Matz olivier.matz at 6wind.com
Wed Oct 16 09:22:42 CEST 2019


Hi Morten,

On Fri, Oct 11, 2019 at 01:24:00PM +0200, Morten Brørup wrote:
> The rte_mempool_get_bulk() documentation says:
> 
> "If cache is enabled, objects will be retrieved first from cache, subsequently from the common pool."
> 
> But __mempool_generic_get() only uses the cache if the request is smaller than the cache size. If not, objects will be retrieved from the common pool only.
> 
> Either the documentation should be corrected, or the implementation should behave as described, i.e. retrieve the first of the objects from the cache and the remaining objects from the common pool.

That's correct. I think the documentation could be updated.
Maybe something like this:

 * If cache is enabled, objects will be retrieved first from cache,
 * subsequently from the common pool. If the number of requested objects
 * is higher than the cache size, the objects are directly retrieved
 * from the common pool.

The put() suffers from the same problem, but the actual behavior is
not easy to describe. We could add this:

 * The objects are added in the cache if it is enabled, and if
 * the number of objects is smaller than RTE_MEMPOOL_CACHE_MAX_SIZE.
 * After the operation,	if the cache length is above 1.5 * size,
 * some	objects	are also returned to the common	pool.

But I feel the comment is just a duplication of the code, but in
english... and there's a risk that they become unsynchronized in the
future (especially because the comment is above
rte_mempool_generic_put() and the code is in
__rte_mempool_generic_put()).



> PS: I stumbled into this while writing the unit test for mbuf bulk alloc/free.
> 
> PPS: It seems unit tests for mempool bulk alloc/free are missing. :-)
> 
> 
> Med venlig hilsen / kind regards
> - Morten Brørup
> 
> 


More information about the dev mailing list