在 Linux 中,给定 DirectMap4k、DirectMap2M、DirectMap4M 和 DirectMap1G,为什么要使用 nr_hugepages?

在 Linux 中,给定 DirectMap4k、DirectMap2M、DirectMap4M 和 DirectMap1G,为什么要使用 nr_hugepages?

看来内核无论如何都在使用大页面,那么为什么要使用特定的内核参数来指定要保留的大页面数量呢?

全部/proc/meminfo显示后DirectMap4KDirectMap4M、 和的值DirectMap1G指示每种大小的页面存在的页表条目数。因此,显然,正在使用大于 4KiB 的页面。

为什么/proc/sys/vm/nr_hugepages和朋友还存在?

答案1

nr_hugepages仍然存在,因为它是您提到的其他价值观的补充。这内核文档具有所有详细信息,但基本上/proc/sys/vm/nr_hugepages显示了内核大页面池中默认大小的持久大页面的数量(其大小由HugePages_Totalin显示/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)。

相关内容