我正在寻找一种在内核模块中分配大页面(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中所述。但是,我正在寻找一种更直接的分配方式,因为我只在内核空间中需要它们。
答案 0 :(得分:1)
类似于
kmalloc(0x200000, GFP_KERNEL | __GFP_COMP)
应该工作。
复合页面(__GFP_COMP)是将两个或多个物理上连续的页面组合成一个单元,该单元可以在许多方面被视为一个较大的页面。它们最常用于创建大页面。
这假定已配置并可用了大页面。