我有许多服务器用作 KVM 管理程序节点。我们希望启用大页面并利用此功能解决与性能相关的问题。
我在网上查看了如何启用大页面,这非常清楚和简单,但我找不到的是如何确定应该使用的大页面计数值。
为了给您一些观点,这是我们拥有的系统(在整个集群中相同):
$ free -g
total used free shared buff/cache available
Mem: 503 5 497 0 1 495
Swap: 0 0 0
我们希望启用大小为 1GB 的巨页,但巨页数是我们不知道如何定义的。这个数字是如何确定的,是否基于内存,任何输入都将不胜感激。
有问题的配置:
GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX hugepagesz=1G hugepages=<what goes here> transparent_hugepage=never"
为了进行测试,请在小页面上完全加载具有典型工作负载的这些虚拟机管理程序主机之一。所以,不要设置
hugepages
开始。捕获一些
/proc/meminfo
. 观察如果PageTables:
内存占用太大,系统 CPU 很重,那就是开销。开销可能不会让人无法忍受,但 500 GB 已经很多了,大页面应该会带来好处。DirectMap1G:
是内核使用 1GB 映射跟踪的内容,以 kB 为单位。不一定是显式的大页面,只是内核能够找到的连续的。将实验值除以 1048576 以获得巨大页面的起始值。也记录
DirectMap2M:
一下,这些是 2MB 的地图,以防大页面效果更好。巨大的页面分配不能是主机内存的 100%,只有 4k 使用,VM 主机不应过度使用客户内存。大约,至少百分之几用于内核、缓存、管理程序,还有一点免费。其余的大部分可以用于大页面。
RHEL 文档建议使用早期启动脚本来戳/sys/devices/system/node/node*/hugepages/hugepages-1048576kB/nr_hugepages 的页数。请注意,如果您有多个 NUMA 节点,您可能需要调整脚本以在每个节点中插入一个值。
hugepages
在内核命令行上仍然是一个选项,但是您必须使用引导加载程序配置维护特定于主机内存大小的数字。说到引导加载程序配置,我同意
transparent_hugepage=never
. THP 会产生大量开销碎片整理页面并将它们打乱。在具有已知工作负载的大型内存盒上不受欢迎。