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_COEF
和KSM_THRES_CONST
计算出一个临界值:thres
,这个值等于total
* KSM_THRES_COEF
/ 100
,但是如果thres
小于 KSM_THRES_CONST
,那么thres
就 等于 KSM_THRES_CONST
接下来计算qemu进程使用的内存总和:committed
仅当committed
+ thres
> total
时,才开始操作内存页合并,据此如果committed
很高但未超过total
值时,可以通过调整thres
值来提前开始内存页合并
每次合并的内存页数量计算方式:判断剩余内存量free
与thres
的大小,如果free
< thres
,ksm每次扫描后内存页合并数会 增加 KSM_NPAGES_BOOST
,上限为KSM_NPAGES_MAX
;反之内存页合并数量会 减少 KSM_NPAGES_DECAY
,但是下限为KSM_NPAGES_MIN
参考资料:
- http://www.chenshake.com/adjust-the-ksm-optimize-kvm-performance/
- https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-KSM.html
- https://www.kernel.org/doc/Documentation/vm/ksm.txt
KSM脚本:
1 | /usr/sbin/ksmtuned |