Выделение огромных страниц не по умолчанию с помощью mmap или shmget в Linux x86-64

ОБНОВЛЕНИЕ: я переключил огромный размер страницы по умолчанию на 2 МБ и перезагрузился, чтобы убедиться, что это всегда был нестандартный размер, который не срабатывал, и теперь я могу выделить из обоих пулов. Я в замешательстве, но, возможно, делаю успехи.

Я безуспешно пытался получить shmget и mmap для выделения из пула огромных страниц не по умолчанию на ядре 4.13.0-32-generic. Я настроил огромные страницы 2M и 1G. Со страницей 1G в качестве размера по умолчанию этот вызов завершится успешно:

addr = mmap(0, byteAmount, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_HUGETLB|MAP_ANONYMOUS|MAP_HUGE_1GB, -1, 0);

но это не удастся с Cannot allocate memory:

addr = mmap(0, byteAmount, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_HUGETLB|MAP_ANONYMOUS|MAP_HUGE_2MB, -1, 0);

огромныйадм --объясните вывод:

Total System Memory: 32004 MB

Mount Point          Options
/dev/hugepages       rw,relatime,pagesize=1024M
/dev/hugepages2MB    rw,relatime,pagesize=2M

Huge page pools:
      Size  Minimum  Current  Maximum  Default
   2097152     1024     1024     1024         
1073741824        1        1        1        *

Huge page sizes with configured pools:
2097152
1073741824

The /proc/sys/vm/min_free_kbytes of 67584 is too small. To maximiuse efficiency
of fragmentation avoidance, there should be at least one huge page free per zone
in the system which minimally requires a min_free_kbytes value of 57671680

A /proc/sys/kernel/shmmax value of 6442450944 bytes may be sub-optimal. To maximise
shared memory usage, this should be set to the size of the largest shared memory
segment size you want to be able to use. Alternatively, set it to a size matching
the maximum possible allocation size of all huge pages. This can be done
automatically, using the --set-recommended-shmmax option.

The recommended shmmax for your currently allocated huge pages is 3221225472 bytes.
To make shmmax settings persistent, add the following line to /etc/sysctl.conf:
  kernel.shmmax = 3221225472
hugeadm:WARNING: There is no swap space configured, resizing hugepage pool may fail
hugeadm:WARNING: Use --add-temp-swap option to temporarily add swap during the resize

To make your hugetlb_shm_group settings persistent, add the following line to /etc/sysctl.conf:
  vm.hugetlb_shm_group = 0

Note: Permanent swap space should be preferred when dynamic huge page pools are used.

Цель состоит в том, чтобы иметь возможность использовать комбинацию страниц размером 2 МБ и 1 ГБ, чтобы максимизировать количество попаданий TLB. Любая помощь очень ценится!


person James    schedule 13.03.2018    source источник


Ответы (1)


Хорошо, я подтвердил, что вызовы mmap и shmget теперь работают для выделения памяти из пулов огромных страниц 2M и 1G. Похоже, что система огромных страниц каким-то образом вышла из строя, и для ее исправления потребовалась перезагрузка. Возможно, это было вызвано тем, что я динамически изменял размер пула 1G, записывая в /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages

Извините за шум!

person James    schedule 13.03.2018