前段时间介绍了巨页内存在虚拟化中的使用,但是使用巨型页有坏处:必须手工配置,虚拟机的数量,可用的内存,虚拟机的启动,关闭,迁移都需要重新配置,并且不能使用swap。
透明巨页内存
今天介绍下透明巨页内存,使用透明巨页内存的好处:
1 可以使用swap,内存页默认是2M大小,需要使用swap的时候,内存被分割为4k大小
2 对用户透明,不需要用户做特殊配置
3 不需要root权限
4 不需要依某种库文件
透明巨页内存配置
centos6以上默认启用透明巨页内存,查看目前状态
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
修改配置
echo never >/sys/kernel/mm/transparent_hugepage/enabled
参数说明
never 关闭,不使用透明内存
alway 尽量使用透明内存,扫描内存,有512个 4k页面可以整合,就整合成一个2M的页面
madvise 避免改变内存占用
使用情况监控
可以查看/sys/kernel/mm/transparent_hugepage/khugepaged下信息
pages_to_scan (默认 4096 = 16MB)
一个扫描周期被扫描的内存页数
scan_sleep_millisecs (默认 10000 = 10sec)
多长时间扫描一次
alloc_sleep_millisecs (默认 60000 = 60sec)
多长时间整理一次碎片
也可以查看/proc/meminfo信息
grep Huge /proc/meminfo
AnonHugePages: 266240 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
使用注意要点:
虚拟机和宿主机都需要启动THP,这样可以获得以下好处
虚拟机的cpu可以使用2M的TLB
相同的算法
相同的代码
相同的内核镜像