看来内核无论如何都在使用大页面,那么为什么要使用特定的内核参数来指定要保留的大页面数量呢?
全部/proc/meminfo
显示后DirectMap4K
、DirectMap4M
、 和的值DirectMap1G
指示每种大小的页面存在的页表条目数。因此,显然,正在使用大于 4KiB 的页面。
为什么/proc/sys/vm/nr_hugepages
和朋友还存在?
答案1
nr_hugepages
仍然存在,因为它是您提到的其他价值观的补充。这内核文档具有所有详细信息,但基本上/proc/sys/vm/nr_hugepages
显示了内核大页面池中默认大小的持久大页面的数量(其大小由HugePages_Total
in显示/proc/meminfo
)。nr_hugepages
是管理员控制的设置,在启动时使用hugepages
内核参数定义,和/或在运行时通过写入定义nr_hugepages
(只要系统能够提供请求的大页面数量)。
目的nr_hugepages
是使大页面可用到用户空间程序,通过 hugetlbfs
或共享内存或mmap
.分配的页数通过 nr_hugepages
构成为此用途保留的大页面池;如果系统资源允许,可能会提供更多大页面(最多可达 所设置的限制nr_overcommit_hugepages
),但这并不能保证。它可在所有支持大页面的平台上使用。这些页面对于进行大量内存分配的程序很有用,但它们确实引入了约束 - 特别是它们不能被换出。
正如中提到的Linux 的“/proc/meminfo”文件中的 HardwareCorrupted、DirectMap4k、DirectMap2M 字段是什么意思?,DirectMap
是 x86 特定的实现细节。它测量不同大小页面的页面映射的使用情况,由内核;这显示了内核能够将页面映射为各种大小的大页面的程度。这不受以下限制nr_hugepages
:即使在大页面池(用于用户空间)中没有大页面的系统上,内核也会尝试合并页面映射以减少 TLB 负载(请try_preserve_large_page
参阅pageattr.c
)。