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

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

我想在 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

可以手动更改此设置:

# 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]

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

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

我还尝试将设置附加transparent_hugepage=never到内核行/etc/grub.conf(如解释的那样那里),但效果并没有更好。

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

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

答案1

解决方案是调整,正如@michael-hampton 指出的那样。棘手的部分是虚拟机插件只能配置/sys/kernel/mm/transparent_hugepage/enabled设置。

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

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

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

mkdir /etc/tuned/custom

第2步:创建个人资料/etc/tuned/custom/tuned.conf

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

[script]
script=script.sh

请注意,此配置文件继承自虚拟访客,这是我的活动配置文件,实际上看起来适合虚拟化服务器 (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 $@

使其可执行:

sudo chmod 755 /etc/tuned/custom/script.sh

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

tuned-adm profile custom

现在你应该得到:

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

重启后它将继续存在。

答案2

除了设置 grub 命令行之外,您还需要配置 tuned。但不要使用您链接的说明,因为它们充满了错误,光是解释它们就需要半天时间。

创建自定义调整配置文件(我将其称为custom),然后设置配置文件。您将基于现有配置文件,例如,virtual-guest如果您在虚拟机中运行(当然是 EC2),或者throughput-performance如果您在物理机上运行。

创建目录来保存自定义配置文件:

mkdir /etc/tuned/custom

创建自定义配置文件/etc/tuned/custom/tuned.conf,例如:

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

现在设置配置文件:

tuned-adm profile custom

答案3

也可以尝试一下

nano /etc/init.d/disable-transparent-hugepages

#!/bin/sh
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > ${thp_path}/enabled
    echo 'never' > ${thp_path}/defrag

    unset thp_path
    ;;
esac

sudo chmod 755 /etc/init.d/disable-transparent-hugepages

sudo chkconfig --add disable-transparent-hugepages

答案4

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


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

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

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

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

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

              # 评论
              ; 评论

              令牌 = 价值

       请注意,空行会被忽略,标记或值前后的空格也会被忽略,但值中可以包含空格。以 # 或 ; 开头的行被视为
       评论并被忽略。

例子
              # sysctl.conf 示例
              #
                kernel.domainname = example.com
              ;这个有一个空间将被写入 sysctl!
                kernel.modprobe = /sbin/mod 探测

相关内容