Выделение огромных страниц в модулях ядра - PullRequest
4 голосов
/ 20 марта 2019

Я ищу способ размещения огромных страниц (2M или 1G) в модуле ядра (я использую версию ядра 4.15.0).

В пользовательском пространстве я могу смонтировать файловую систему hugetlbfs, а затем выделить огромные страницы, используя mmap (см., Например, https://blog.kevinhu.me/2018/07/01/01-Linux-Hugepages/). Есть ли аналогичный способ сделать это в пространстве ядра?

Мне известно, что я мог бы сначала разместить их в пользовательском пространстве, а затем передать их ядру, используя get_user_pages, как описано в Последовательный доступ к огромным страницам в драйвере ядра . Однако я ищу более прямой способ их распределения, поскольку они нужны мне только в пространстве ядра.

1 Ответ

1 голос
/ 25 мая 2019

Что-то похожее на

kmalloc(0x200000, GFP_KERNEL | __GFP_COMP)

должно работать.

Составная страница (__GFP_COMP) - это объединение двух или более физически смежных страниц в единое целое, которое во многих отношениях можно рассматривать как одну большую страницу. Они чаще всего используются для создания огромных страниц.

Предполагается, что огромные страницы настроены и доступны.

...