我已经配置了 Huge Pages 以与 Java 一起使用,它似乎运行良好,尽管我对 /proc/meminfo 中的会计有疑问。为了显示
# grep HugePages /proc/meminfo
AnonHugePages: 274432 kB
HugePages_Total: 1008
HugePages_Free: 596
HugePages_Rsvd: 594
HugePages_Surp: 0
我的问题涉及“免费”和“Rsvd”数字 - 为什么它们加起来不等于“总计”1008?他们实际上加起来是 1190。我在这里不明白什么?
这是因为 HugePages_rsvd 本质上是从 HugePages_Free 中读取的。意思是,在 596 个免费的大页面中,594 个已经被某些应用程序保留使用。那就是内核已承诺这 594 个大页面可用于应用程序。
如果现在请求 3 个大页面,那么它将失败,因为只有 2 个可以保留。将其视为 malloc() 调用,当您保留内存虚拟页面以说明进程的 VSZ 但当进程实际使用它们时,它成为进程的 RSZ(运行集)。
由于大页面始终驻留在主内存中,当应用程序请求它们时,内核会从空闲池中减少它并增加 Rsvd 计数器。
这是来自内核源代码。https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt