[dpdk-dev] [PATCH 0/2] eal/malloc: fix wrong heap initialization over multiple memsegs

Gowrishankar gowrishankar.m at linux.vnet.ibm.com
Thu May 3 12:11:34 CEST 2018


From: Gowrishankar Muthukrishnan <gowrishankar.m at linux.vnet.ibm.com>

When there are multiple memsegs (each per hugepage), there are couple of
problems observed:

  1. Same heap size index is always chosen to add new malloc_elems 
     again and again, while there is an increasing heap size actually.
     Hence, when there is memalloc request for size *more than* 
     elem->size available in free heap, malloc_heap_alloc would fail.
     In elem_start_pt(), we are actually relying on elem->size at the
     best, for finding suitable element, which is lower than requested
     size, in this case.

     Hence, patch 1 in this series addresses this by merging
     contiguous malloc_elem (by virt addresses), so that there is 
     better chance of finding suitable elem for the requested size.
     
  2. Even after resizing the heap malloc_elems, its free_head index
     is still the same, as the memsegs are just added in every malloc_
     elem. If larger memory is requested in rte_malloc, in a way
     that, heap index of requested size is beyond the slot where the
     entire heap is available, malloc_heap_alloc would fail.
     Because, at the time of heap init, only the lower index is
     always chosen to fill up memsegs. Hence, patch 2 addresses this
     by moving the list of malloc_elems into new slot in heap, as its
     size grows.
     
We encountered these situations as we run ip_reassembly example app,
when multiple segments are created in VA (when overcommit hugepages set
in powerpc arch).

These problems are found only in the current releases (until v18.05
which carries new implementation for dynamic memory allocation).
These patches are tested with unit tests as well as some of the 
examples apps. I request more testing if possible, on other archs
as these are problems in available LTS codes as well.

Signed-off-by: Gowrishankar Muthukrishnan <gowrishankar.m at linux.vnet.ibm.com>

Gowrishankar Muthukrishnan (2):
  eal/malloc: merge malloc_elems in heap if they are contiguous
  eal/malloc: fix heap index to correctly insert memseg

 lib/librte_eal/common/malloc_heap.c | 52 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)

-- 
1.9.1



More information about the dev mailing list