ошибка mmap : не удается выделить память. как выделить достаточно огромных страниц по умолчанию в качестве администратора?

#memory #memory-management #mmap #ubuntu-20.04 #grub

Вопрос:

Я компилировал и запускал эту программу, но получил «ошибку mmap : не удается выделить память». Комментарий вверху гласит:

 /*
 * Example of using hugepage memory in a user application using the mmap
 * system call with MAP_HUGETLB flag.  Before running this program make
 * sure the administrator has allocated enough default sized huge pages
 * to cover the 256 MB allocation.
 *
 * For ia64 architecture, Linux kernel reserves Region number 4 for hugepages.
 * That means the addresses starting with 0x800000... will need to be
 * specified.  Specifying a fixed address is not required on ppc64, i386
 * or x86_64.
 */
 

Я хочу проверить if the administrator has allocated enough default sized huge pages to cover the 256 MB allocation , но я системный администратор. Что мне делать? Я нахожусь на компьютере ubuntu 20.04 x86_64. ( побочный вопрос : использует ли mmap область кучи?)

ДОБАВИТЬ : пожалуйста, посмотрите мой комментарий (я добавил аргумент команды загрузки, и код работает. Я временно добавил аргумент загрузки в меню grub.), но я хотел бы добавить сценарий инициализации, чтобы он вступал в силу каждый раз при загрузке компьютера.

Комментарии:

1. Вы читали документацию для огромных страниц ?

2. @JosephSible-Восстановите монику Привет, спасибо! Я прочитал документ( не до конца) и добавил «огромные страницы=16» в команду загрузки . Мне и мне пришлось изменить ДЛИНУ кода на 2 М. (256 м было большим). И код работает! Спасибо!

3. Параметры командной строки ядра могут быть добавлены в /etc/default/grub .

4. @NateEldridge Привет, спасибо! Я добавил ваш метод в ответ.

5. Что касается вашего побочного вопроса «Использует ли mmap область кучи?». Нет, mmap создает новый регион, вы можете думать о нем как о расположении между регионами heap и. stack

Ответ №1:

По-видимому, существует 2 метода.

  1. добавьте vm.nr_hugepages = 16 файл /etc/sysctrl.conf и перезагрузитесь.
    Я проверил, что это работает.
  2. (как прокомментировал Нейт Элдридж) добавьте «огромные страницы=16″ в строку GRUB_CMDLINE_LINUX=»» (в кавычках) /etc/по умолчанию/grub и выполните обновление-grub.