mempool: introduce indexed memory pool
authorXueming Li <xuemingl@mellanox.com>
Thu, 17 Oct 2019 06:55:01 +0000 (06:55 +0000)
committerOlivier Matz <olivier.matz@6wind.com>
Thu, 26 Dec 2019 09:34:52 +0000 (10:34 +0100)
commit946f84933ae5591eaddd038f2842109f76997765
tree3f4e2a5d8a32f97847fa6a12f464abc99bc212be
parent2e088e6f94b773233c06440763c1be43d0d705b3
mempool: introduce indexed memory pool

Indexed memory pool manages memory entries by index, allocation from
pool returns both memory pointer and index(ID). users save ID as u32
or less(u16) instead of traditional 8 bytes pointer. Memory could be
retrieved from pool or returned to pool later by index.

Pool allocates backend memory in chunk on demand, pool size grows
dynamically. Bitmap is used to track entry usage in chunk, thus
management overhead is one bit per entry.

Standard rte_malloc demands malloc overhead(64B) and minimal data
size(64B). This pool aims to such cost saving also pointer size.
For scenario like creating millions of rte_flows each consists
of small pieces of memories, the difference is huge.

Like standard memory pool, this lightweight pool only support fixed
size memory allocation. Pools should be created for each different
size.

To facilitate memory allocated by index, a set of ILIST_XXX macro
defined to operate entries as regular LIST.

By setting entry size to zero, pool can be used as ID generator.

Signed-off-by: Xueming Li <xuemingl@mellanox.com>
lib/librte_mempool/Makefile
lib/librte_mempool/rte_indexed_pool.c [new file with mode: 0644]
lib/librte_mempool/rte_indexed_pool.h [new file with mode: 0644]
lib/librte_mempool/rte_mempool_version.map