在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的内核行( /etc/grub.conf ),但是效果不好。

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

编辑:改变标题…我需要禁用THP THP碎片整理

正如@迈克尔 – 汉普顿指出的那样,解决scheme正在调整中 。 棘手的部分是vm插件只能configuration/sys/kernel/mm/transparent_hugepage/enabled设置。

要禁用/sys/kernel/mm/transparent_hugepage/defrag设置,我必须创build一个在configuration文件启动时调用的脚本。

最后,完整的解决scheme是:

第1步 :创build目录来保存自定义configuration文件:

 mkdir /etc/tuned/custom 

第2步 :创buildconfiguration文件/etc/tuned/custom/tuned.conf

 [main] include=virtual-guest [vm] transparent_hugepages=never [script] script=script.sh 

请注意,此configuration文件inheritance自虚拟客户端 ,这是我的活动configuration文件,实际上看起来适合虚拟化服务器(EC2)。 您可以使用命令tuned-adm active查看您的活动configuration文件。 如果您好奇,可以查看/usr/lib/tuned/

第3步 :创build脚本/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步 :激活新的configuration文件:

 tuned-adm profile custom 

现在你应该得到:

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

它将在重新启动后保留。

除了设置grub命令行之外,还需要configurationtuned。 但是不要使用你所链接的指令,因为它们充满了错误,所以只需要半天的时间来解释它们。

创build一个自定义的调整configuration文件(我将称之为custom ),然后设置configuration文件。 您将基于现有的configuration文件,例如虚拟机(如果您在虚拟机中运行)(当然是EC2),或者throughput-performance如果您在物理机器上)。

创build保存自定义configuration文件的目录:

 mkdir /etc/tuned/custom 

创build自定义configuration文件/etc/tuned/custom/tuned.conf ,例如:

 [main] include=virtual-guest [vm] transparent_hugepages=never 

现在设置configuration文件:

 tuned-adm profile custom 

也试试这个

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

编辑:上面的回答是错误的 ,因为透明巨大的页面旋钮目前从sysctl丢失。 对不起,噪音。


你可以把所需的值放在/etc/sysctl.conf

从sysctl.conf(5)手册页:

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

名称
        sysctl.conf  -  sysctl预加载/configuration文件

描述
        sysctl.conf是一个包含sysctl值的简单文件,可以通过sysctl读入和设置。 语法简单如下:

               #评论
               ; 评论

              标记=值

       请注意,忽略空白行,忽略标记或值之前和之后的空白,尽pipe值中可以包含空格。 以#或者开头的行 被考虑
       评论和忽略。

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