开启THP精髓是提高内存分配效率,减少CPU SYS开销。
1、首先检查THP的启用状态:
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
如果输出结果为[always]表示透明大页启用了。[never]表示透明大页禁用、[madvise]表示(只在MADV_HUGEPAGE标志的VMA中使用THP
这个状态就说明都是启用的。
2、在运行时禁用THP(Transparent HugePages)
运行以下命令即时禁用THP,该命令适用于其它Linux系统:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
3、永久禁用THP(Transparent HugePages )
编辑rc.local文件:
[root@localhost ~]# vim /etc/rc.d/rc.local
增加下列内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
4、保存退出,然后赋予rc.local文件执行权限:
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
5、最后重启系统,以后再检查THP应该就是被禁用了
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
6、另一种方式查看是否被禁用看是否为0
cat /proc/sys/vm/nr_hugepages
sysctl vm.nr_hugepages
查看使用的内存
cat /proc/meminfo && grep AnonHugePages /proc/meminfo
对于数据库应用,不推荐使用 THP.主要的原因是这类数据库大部分访问内存的方式是分散的,并不是访问连续的页面,而这样的访问模式,
就会造成内存的碎片化.访问的page 不也不是大量连续性的. 并且在不启用THP 时申请4KB的内存时,
LINUX会分配相应的内存给应用, 但如果是在系统级别启用了THP,则类似数据库申请内存时,即使申请的值是4KB ,
但分配是会以大于4KB例如 2MB 来进行分配,这样数据库申请使用内存的方式也会出现问题,和相关的损耗.