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>