是否可以动态禁用透明大页?

是否可以动态禁用透明大页?

为了禁用THP

我们在所有 635 台机器上执行了以下操作RHEL(我们有rhel 7.5版本)

这些行来自我们在所有机器上运行的 bash 脚本

步骤1

[[ -f /sys/kernel/mm/transparent_hugepage/enabled ]] && echo never > /sys/kernel/mm/transparent_hugepage/enabled
[[ -f /sys/kernel/mm/transparent_hugepage/defrag  ]] && echo never > /sys/kernel/mm/transparent_hugepage/defrag

确认:

cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

但众所周知,机器运行时不考虑此步骤restarted/rebooted

第2步

所以我们也这样做了,我们将以下几行附加到/etc/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

问题是:

step 1正如我上面提到的,真的是即时的disabled吗?THP

注意 - 还有来自一台典型机器的其他信息

sysctl -a | grep hugepage
vm.hugepages_treat_as_movable = 0
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0

参考 -配置透明大页

答案1

我上面提到的步骤 1 真的立即禁用了 THP 吗?

是的,您所做的任何事情sysfs都是即时完成的。它已经记录在内核文档/中transhuge.html

然而, 引用自https://access.redhat.com/solutions/46111

笔记:运行上述命令将仅停止新 THP 的创建和使用。运行上述命令时创建和使用的 THP 不会被反汇编到常规内存页面中。要完全摆脱 THP,应重新启动系统并在启动时禁用 THP。

有一个邮政和你同样的问题。那里,ub3rst4r解释说这/etc/rc.local对他的用例不起作用,因为它是在所有服务启动后执行的

因此,我强烈建议遵循同一内核文档/中提到的官方方式transhuge.html

您可以通过将参数...transparent_hugepage=never 传递到内核命令行来更改透明大页支持的sysfs 启动时间默认值。

您当然可以使用 使其持久化/etc/default/grub。另外,我建议在重新启动后进行测试

grep AnonHugePages /proc/meminfo
AnonHugePages:         0 kB

如果正确禁用它,您应该得到 0 值。

相关内容