我有许多用作 KVM 虚拟机管理程序节点的服务器。我们想启用大页面并利用此功能解决与性能相关的问题。
我已经在网上查找了如何启用大页面,这非常清楚和简单,但我找不到如何确定应该使用的大页面计数值。
为了让您了解一些情况,这是我们拥有的系统(整个集群相同):
$ free -g
total used free shared buff/cache available
Mem: 503 5 497 0 1 495
Swap: 0 0 0
我们想要启用 1GB 大小的 Hugepage,但 HugePages 的数量是我们不知道该如何定义的。这个数字是如何确定的,是否基于内存,欢迎提供任何信息。
有问题的配置:
GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX hugepagesz=1G hugepages=<what goes here> transparent_hugepage=never"
答案1
为了进行测试,请在小页面上完全加载其中一个虚拟机管理程序主机,并加载典型工作负载。因此,不要设置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 会对页面进行碎片整理和重新排列,从而产生大量开销。对于已知工作负载的大内存盒来说,这是不可取的。