I may be incorrect, but is it not simply the case, that when using the no-huge parameter that MAP_HUGETLB is omitted from flags?

 

Ray K

 

From: Nick Tian <nick.tian@longsailingsemi.com>
Sent: Tuesday 9 August 2022 03:55
To: users@dpdk.org
Subject: About memory coherency

 

Hi

I am confusing about the "no-huge" option of DPDK 21.11.

The dpdk usage said: --no-huge:Use malloc instead of hugetlbfs.

But when I check the EAL source code, I found some code piece like this:

It's look like "no-huge" option will lead dpdk use memfd_create-->ftruncate-->mmap to reserve memory

and then provide to application with rte_malloc.

Am I right?

If so, what the "malloc" in "use malloc instead of hugelbfs" refer to?

 

EAL_memory.c

static int eal_legacy_hugepage_init(void){

....

 if (internal_conf->no_hugetlbfs) {
....
#ifdef MEMFD_SUPPORTED
  /* create a memfd and store it in the segment fd table */
  memfd = memfd_create("nohuge", 0);
......

  /* we got an fd - now resize it */
   if (ftruncate(memfd, internal_conf->memory) < 0) {
.....

   fd = memfd;
    flags = MAP_SHARED;   }
....
  prealloc_addr = msl->base_va;
  addr = mmap(prealloc_addr, mem_sz, PROT_READ | PROT_WRITE,
    flags | MAP_FIXED, fd, 0);

...