numam-dpdk/devtools
Ilya Maximets 1b72605d24 mem: balanced allocation of hugepages
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 using following schema:

	1) Allocate essential hugepages:
		1.1) Allocate as many hugepages from numa N to
		     only fit requested memory for this numa.
		1.2) repeat 1.1 for all numa nodes.
	2) Try to map all remaining free hugepages in a round-robin
	   fashion.
	3) Sort pages and choose the most suitable.

In this case all essential memory will be allocated and all remaining
pages will be fairly distributed between all requested nodes.

New config option RTE_EAL_NUMA_AWARE_HUGEPAGES introduced and
enabled by default for linuxapp except armv7 and dpaa2.
Enabling of this option adds libnuma as a dependency for EAL.

Fixes: 77988fc08d ("mem: fix allocating all free hugepages")

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Tested-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
2017-06-30 17:54:32 +02:00
..
cocci fix typos using codespell utility 2017-06-14 23:54:13 +02:00
build-tags.sh devtools: add tags and cscope index generation 2017-04-30 12:57:04 +02:00
check-git-log.sh devtools: add git log checks for acronyms 2017-04-25 11:58:07 +02:00
check-includes.sh vhost: fix header for strict compilation flags 2017-05-01 00:13:15 +02:00
check-maintainers.sh scripts: move to devtools 2017-01-04 21:17:32 +01:00
checkpatches.sh devtools: ignore warning on long log string 2017-03-06 16:00:35 +01:00
cocci.sh scripts: move to devtools 2017-01-04 21:17:32 +01:00
git-log-fixes.sh devtools: list stable commits without fixline 2017-04-28 12:05:03 +02:00
load-devel-config scripts: move to devtools 2017-01-04 21:17:32 +01:00
test-build.sh mem: balanced allocation of hugepages 2017-06-30 17:54:32 +02:00
test-null.sh scripts: move to devtools 2017-01-04 21:17:32 +01:00
validate-abi.sh fix typos using codespell utility 2017-06-14 23:54:13 +02:00