开启大页
https://help.aliyun.com/zh/alinux/user-guide/hugetext
使用代码大页
启用代码大页
该功能默认是关闭的,可以使用sysfs接口进行启用。支持如下三种启用方式。
方式一:仅打开二进制和动态库大页
sudo sh -c 'echo 1 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
方式二:仅打开可执行匿名大页
sudo sh -c 'echo 2 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
方式三:同时打开以上两类大页
sudo sh -c 'echo 3 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
说明
打开代码大页功能并不意味着立即合并大页,代码大页功能是异步的。
检查是否启用代码大页
运行以下命令,查看/proc/<pid>/smaps中的FilePmdMapped字段可确定是否使用了代码大页,FilePmdMapped字段表示进程代码大页的使用数量(单位kB)。
sudo cat /proc/<pid>/smaps | grep FilePmdMapped | awk '{sum+=$2}END{print"Sum= ",sum}'
说明
<pid>需替换为您实际应用程序进程ID,可通过pidof sshd查看进程ID。
关闭代码大页
运行以下命令,使用sysfs接口关闭代码大页。
sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
说明
关闭代码大页功能并不意味着立即拆散大页,代码大页功能是异步的。
如果一段代码曾经被合并为大页,即使关闭代码大页功能,大页缓存还是存在。
另外,支持在系统启动项中设置代码大页的状态:设置hugetext=0/1/2/3。系统启动项与您系统的GRUB版本以及系统镜像有关,请您根据实际情况进行配置。
关闭代码大页后,同时支持以下几种方式清理已使用的大页。
方式一:清理整个系统的page cache(文件缓存)
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
方式二:清理单个文件的page cache(文件缓存)
sudo vmtouch -e /<path>/target
说明
vmtouch是一个用于检查文件是否已经加载到内存中,并且可以将文件锁定到内存或者从内存中卸载的工具。如果您没有安装vmtouch,需先执行sudo yum install vmtouch命令安装。
<path>需替换为您实际应用程序的文件路径。
方式三:清理遗留大页
sudo sh -c 'echo 1 > /sys/kernel/debug/split_huge_pages'
浙公网安备 33010602011771号