在内核模块中分配大页面

时间:2019-03-20 00:14:25

标签: linux-kernel x86 x86-64 kernel-module huge-pages

我正在寻找一种在内核模块中分配大页面(2M或1G)的方法(我使用的是4.15.0版内核)。

在用户空间中,我可以挂载hugetlbfs文件系统,然后使用mmap分配大页面(例如,参见https://blog.kevinhu.me/2018/07/01/01-Linux-Hugepages/)。在内核空间中有类似的方法吗?

我知道我可以先在用户空间中分配它们,然后使用get_user_pages将它们传递给内核,如Sequential access to hugepages in kernel driver中所述。但是,我正在寻找一种更直接的分配方式,因为我只在内核空间中需要它们。

1 个答案:

答案 0 :(得分:1)

类似于

kmalloc(0x200000, GFP_KERNEL | __GFP_COMP)

应该工作。

复合页面(__GFP_COMP)是将两个或多个物理上连续的页面组合成一个单元,该单元可以在许多方面被视为一个较大的页面。它们最常用于创建大页面。

这假定已配置并可用了大页面。