2022-07-18 09:11 (UTC+0500), Fidaullah Noonari: > In try_expand_heap() alloc_sz is calculated > which may result in unnecessary allocation of whole huge page, > this may cause allocation limit from system or eal
Let me suggest a rewording: The amount of memory to allocate from the system for heap expansion was calculated in a way that may yield one page more than needed. This could hit the allocation limit from the system or EAL. The allocation would fail despite enough memory being available. > In response to this mail: > <CAEYuUWCnRZNwxiOHEeTHw0Gy9aFJRLZtvAG9g=smuuvuemc...@mail.gmail.com> Proper links to mails.dpdk.org or inbox.dpdk.org are preferred. > > Signed-off-by: Fidaullah Noonari <fidaullah.noon...@emumba.com> > --- > lib/eal/common/malloc_heap.c | 2 +- > lib/eal/common/malloc_mp.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/eal/common/malloc_heap.c b/lib/eal/common/malloc_heap.c > index 27a52266ad..e348e385e4 100644 > --- a/lib/eal/common/malloc_heap.c > +++ b/lib/eal/common/malloc_heap.c > @@ -402,7 +402,7 @@ try_expand_heap_primary(struct malloc_heap *heap, > uint64_t pg_sz, > int n_segs; > bool callback_triggered = false; > > - alloc_sz = RTE_ALIGN_CEIL(align + elt_size + > + alloc_sz = RTE_ALIGN_CEIL(RTE_ALIGN_CEIL(align, elt_size) + > MALLOC_ELEM_OVERHEAD, pg_sz); > n_segs = alloc_sz / pg_sz; > > diff --git a/lib/eal/common/malloc_mp.c b/lib/eal/common/malloc_mp.c > index 2b8eb51067..1b79ed5e21 100644 > --- a/lib/eal/common/malloc_mp.c > +++ b/lib/eal/common/malloc_mp.c > @@ -249,7 +249,7 @@ handle_alloc_request(const struct malloc_mp_req *m, > return -1; > } > > - alloc_sz = RTE_ALIGN_CEIL(ar->align + ar->elt_size + > + alloc_sz = RTE_ALIGN_CEIL(RTE_ALIGN_CEIL(ar->align, ar->elt_size) + > MALLOC_ELEM_OVERHEAD, ar->page_sz); > n_segs = alloc_sz / ar->page_sz; > Wrong argument order for RTE_ALIGN_CEIL(size, alignment) in both places.