[dpdk-dev] ***Spam*** [RFC 0/4] mempool: avoid objects allocations across pages
arybchenko at solarflare.com
Wed Aug 7 17:21:01 CEST 2019
On 7/19/19 4:38 PM, Olivier Matz wrote:
> When IOVA mode is VA, a mempool can be created with objects that
> are not physically contiguous, which breaks KNI.
> To solve this, this patchset changes the default behavior of mempool
> populate function, to prevent objects from being located across pages.
I'll provide top level review notes on individual patches, but what
I don't understand in general, why do we add a rule to respect
page boundaries in any case even when it is not absolutely required.
It may add holes. Can it make negative impact on performance?
I think that KNI VA-mode requirements are very specific.
It is VA-mode, but page boundaries should be respected even
if VA is contiguous.
> Olivier Matz (4):
> mempool: clarify default populate function
> mempool: unalign size when calculating required mem amount
> mempool: introduce function to get mempool page size
> mempool: prevent objects from being across pages
> lib/librte_mempool/rte_mempool.c | 106 +++++++++++----------------
> lib/librte_mempool/rte_mempool.h | 8 +-
> lib/librte_mempool/rte_mempool_ops.c | 4 +-
> lib/librte_mempool/rte_mempool_ops_default.c | 39 +++++++++-
> 4 files changed, 90 insertions(+), 67 deletions(-)
>> Any suggestions..?
> I took some time to go a bit deeper. I still think we can change the
> default behavior to avoid objects to be located accross pages. But
> it is more complex that I expected.
> I made a draft patchset, that, in short:
> - cleans/renames variables
> - removes the optimistic full iova contiguous allocation
> - changes return value of calc_mem_size to return the unaligned size,
> therefore the allocation is smaller in case of big hugepages
> - changes rte_mempool_op_populate_default() to prevent allocation
> of objects accross multiple pages
> Andrew, Anatoly, did I miss something?
> Vamsi, can you check if it solves your issue?
> Anyway, even if validate the patchset it and make it work, I'm afraid
> this is not something that could go in 19.08.
> The only alternative I see is a specific mempool allocation function
> when used in iova=va mode + kni, as you proposed previously.
> It can probably be implemented without adding a flag, starting from
> rte_mempool_create(), and replacing rte_mempool_populate_default(mp) by
> something else: allocate pages one by one, and call
> rte_mempool_populate_iova() for each of them.
> Hope it helps. Unfortunately, I may not have too much time to spend on
> it in the coming days.
More information about the dev