Hi all.

So, what about this change?

Best regards, Ilya Maximets.

On 16.02.2017 16:01, Ilya Maximets wrote:
> Currently EAL allocates hugepages one by one not paying
> attention from which NUMA node allocation was done.
> 
> Such behaviour leads to allocation failure if number of
> available hugepages for application limited by cgroups
> or hugetlbfs and memory requested not only from the first
> socket.
> 
> Example:
>       # 90 x 1GB hugepages availavle in a system
> 
>       cgcreate -g hugetlb:/test
>       # Limit to 32GB of hugepages
>       cgset -r hugetlb.1GB.limit_in_bytes=34359738368 test
>       # Request 4GB from each of 2 sockets
>       cgexec -g hugetlb:test testpmd --socket-mem=4096,4096 ...
> 
>       EAL: SIGBUS: Cannot mmap more hugepages of size 1024 MB
>       EAL: 32 not 90 hugepages of size 1024 MB allocated
>       EAL: Not enough memory available on socket 1!
>            Requested: 4096MB, available: 0MB
>       PANIC in rte_eal_init():
>       Cannot init memory
> 
>       This happens beacause all allocated pages are
>       on socket 0.
> 
> Fix this issue by setting mempolicy MPOL_PREFERRED for each
> hugepage to one of requested nodes in a round-robin fashion.
> In this case all allocated pages will be fairly distributed
> between all requested nodes.
> 
> New config option RTE_LIBRTE_EAL_NUMA_AWARE_HUGEPAGES
> introduced and disabled by default because of external
> dependency from libnuma.
> 
> Cc: <sta...@dpdk.org>
> Fixes: 77988fc08dc5 ("mem: fix allocating all free hugepages")
> 
> Signed-off-by: Ilya Maximets <i.maxim...@samsung.com>
> ---
>  config/common_base                       |  1 +
>  lib/librte_eal/Makefile                  |  4 ++
>  lib/librte_eal/linuxapp/eal/eal_memory.c | 66 
> ++++++++++++++++++++++++++++++++
>  mk/rte.app.mk                            |  3 ++
>  4 files changed, 74 insertions(+)
> 

Reply via email to