On Thu, Sep 22, 2022 at 12:52 AM Dmitry Kozlyuk <dmitry.kozl...@gmail.com> wrote: > > 2022-09-21 15:35 (UTC+0200), David Marchand: > > On Thu, Jul 28, 2022 at 8:03 PM Dmitry Kozlyuk <dmitry.kozl...@gmail.com> > > wrote: > > > > > > 2022-07-28 14:41 (UTC+0500), Fidaullah Noonari: > > > > 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 mail: > > > > http://inbox.dpdk.org/dev/CAEYuUWCnRZNwxiOHEeTHw0Gy9aFJRLZtvAG9g=smuuvuemc...@mail.gmail.com/ > > > > > > > > Signed-off-by: Fidaullah Noonari <fidaullah.noon...@emumba.com> > > > > > > Acked-by: Dmitry Kozlyuk <dmitry.kozl...@gmail.com> > > > > > > > Do you have a reproducer? > > This sounds like a fix, should we backport it? > > We should, thanks for the catch. > > Reproducer: > > #include <rte_eal.h> > #include <rte_malloc.h> > #include <stdio.h> > > int > main(int argc, char **argv) > { > static const size_t hugepage_sz = 2 * (1 << 20); > static const size_t malloc_elem_overhead = 128; > static const size_t size = hugepage_sz - malloc_elem_overhead; > struct rte_malloc_socket_stats stats_before, stats_after; > size_t alloc_delta; > int ret; > > ret = rte_eal_init(argc, argv); > if (ret < 0) > rte_panic("Cannot init EAL\n"); > rte_malloc_get_socket_stats(0, &stats_before); > (void)rte_malloc(NULL, size, 0); > rte_malloc_get_socket_stats(0, &stats_after); > alloc_delta = stats_after.heap_totalsz_bytes - > stats_before.heap_totalsz_bytes; > puts(alloc_delta == hugepage_sz ? "fixed" : "affected"); > rte_eal_cleanup(); > return 0;
Thanks Dmitry. I'll put a note about this reproducer in the commitlog. > } > -- David Marchand