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