#这里只针对CentOs7系统,内核3.10,grub2
#修改/etc/default/grub,在GRUB_CMDLINE_LINUX中添加transparent_hugepage=never,如下
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=system/root rd.lvm.lv=system/swap rhgb quiet transparent_hugepage=never"
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
#但是这里有个问题,重启机器后,defrag一直是always,而不是never,但是也不影响使用,
#我还没有弄明白defrag的作用,从字面意思是整理内存碎片的作用,按理说应该不影响使用,但是有问题,重启机器后,又变成never了。
#下面是解决disable THP的推荐方法(机器重启后THP仍旧是关闭的):
#disable-transparent-hugepages脚本内容,放到/etc/init.d/下,
#并授权可执行权限chmod 755 /etc/init.d/disable-transparent-hugepages,并加入开机自启动chkconfig --add disable-transparent-hugepages

#!/bin/bash

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

            re='^[0-1]+$'
            if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
            then
              #RHEL 7
              echo 0  > ${thp_path}/khugepaged/defrag
            else
              #RHEL 6
              echo 'no' > ${thp_path}/khugepaged/defrag
            fi

            unset re
            unset thp_path
            ;;
esac


mkdir /etc/tuned/no-thp -p
echo -e "[main]\ninclude=virtual-guest\n[vm]\ntransparent_hugepages=never" >/etc/tuned/no-thp/tuned.conf
tuned-adm profile no-thp

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
#都是always madvise [never]才可以。这个是不用重启机器。