KSM参数调优及工作原理

KSM简介

KSM,kernel samepage merging,是linux为了让多个kvm虚拟机进程共享一片内存页而提出的特性。

服务启动方法

1
/etc/init.d/ksmtuned restart

配置说明

配置文件位于/etc/ksmtuned.conf

KSM_MONITOR_INTERVAL表示每次扫描的时间

KSM_SLEEP_MSEC表示每次休息的时间(最小值为10),KSM每次扫描会占用较多的cpu能力,所以当虚拟机数量较少时可以调整KSM_SLEEP_MSEC至一个较大的值,反之则设置较小的值

KSM_THRES_COEF表示临界值系数

KSM_THRES_CONST表示临界值常量

KSM_NPAGES_BOOST表示内存页合并增加数量

KSM_NPAGES_DECAY表示内存页合并减少数量

KSM_NPAGES_MIN表示内存页合并最小值

KSM_NPAGES_MAX表示内存页合并最大值

LOGFILE表示ksmtuned的日志存放路径,建议是不要修改,需要取消注释才生效

DEBUG取消注释才生效,使用默认值即可

ksm脚本的工作方法

ksm先获取到节点的总内存:total

之后根据KSM_THRES_COEFKSM_THRES_CONST计算出一个临界值:thres,这个值等于total * KSM_THRES_COEF / 100,但是如果thres 小于 KSM_THRES_CONST,那么thres等于 KSM_THRES_CONST

接下来计算qemu进程使用的内存总和:committed

仅当committed + thres > total时,才开始操作内存页合并,据此如果committed很高但未超过total值时,可以通过调整thres值来提前开始内存页合并

每次合并的内存页数量计算方式:判断剩余内存量freethres的大小,如果free < thres,ksm每次扫描后内存页合并数会 增加 KSM_NPAGES_BOOST,上限为KSM_NPAGES_MAX;反之内存页合并数量会 减少 KSM_NPAGES_DECAY,但是下限为KSM_NPAGES_MIN

参考资料:

KSM脚本:

1
/usr/sbin/ksmtuned