在 CentOS 7 EC2 实例上禁用 THP 和 THP 碎片整理

vca*_*rel 9 grub amazon-ec2 centos7

我想在 CentOS 7 EC2 实例上禁用 transparent_hugepage (THP),默认情况下启用:

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
Run Code Online (Sandbox Code Playgroud)

可以手动更改此设置:

# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 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]
Run Code Online (Sandbox Code Playgroud)

...但重新启动后更改将丢失。

我试图将echo never [...]指令放入我的rc.localcloud.cfg文件中,但没有奏效。

我也试图追加设置transparent_hugepage=never到内核行/etc/grub.conf(如解释),但它并没有更好地工作。

那么...如何在 AWS EC2 实例上运行的 CentOS 7 上禁用 THP?

编辑:更改标题...我需要禁用 THPTHP 碎片整理

vca*_*rel 15

正如@michael-hampton 所指出的,解决方案是在调整中。棘手的部分是vm插件只能配置/sys/kernel/mm/transparent_hugepage/enabled设置。

为了禁用该/sys/kernel/mm/transparent_hugepage/defrag设置,我必须创建一个脚本,该脚本在启动时由配置文件调用。

最后,完整的解决方案是:

第 1 步:创建目录以保存自定义配置文件:

mkdir /etc/tuned/custom
Run Code Online (Sandbox Code Playgroud)

第 2 步:创建配置文件/etc/tuned/custom/tuned.conf

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh
Run Code Online (Sandbox Code Playgroud)

请注意,此配置文件继承自virtual-guest,这是我的活动配置文件,实际上看起来适合虚拟化服务器 (EC2)。您可以使用命令查看您的活动配置文件tuned-adm active。如果你好奇,你可以查看预定义配置文件的内容/usr/lib/tuned/

第 3 步:创建脚本/etc/tuned/custom/script.sh

#!/bin/sh

. /usr/lib/tuned/functions

start() {
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    return 0
}

stop() {
    return 0
}

process $@
Run Code Online (Sandbox Code Playgroud)

使其可执行:

sudo chmod 755 /etc/tuned/custom/script.sh
Run Code Online (Sandbox Code Playgroud)

第 4 步:激活新配置文件:

tuned-adm profile custom
Run Code Online (Sandbox Code Playgroud)

现在你应该得到:

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
Run Code Online (Sandbox Code Playgroud)

重启后会一直存在。


sho*_*hok -2

编辑:上面的回复是错误的,因为目前 sysctl 中缺少透明的大页面旋钮。抱歉产生噪音。


您可以将所需的值放入 中/etc/sysctl.conf

来自 sysctl.conf(5) 手册页:

SYSCTL.CONF(5) 文件格式 SYSCTL.CONF(5)

姓名
       sysctl.conf - sysctl 预加载/配置文件

描述
       sysctl.conf 是一个简单文件,包含要由 sysctl 读取和设置的 sysctl 值。语法简单如下:

              # 评论
              ; 评论

              代币=价值

       请注意,空行将被忽略,标记或值前后的空格也将被忽略,尽管值中可以包含空格。以 # 或 ; 开头的行 被考虑
       评论并被忽略。

例子
              # sysctl.conf 示例
              #
                内核.域名 = example.com
              ; 这个有一个空格,将被写入 sysctl!
                kernel.modprobe = /sbin/mod 探针