我想在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.local和cloud.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探针