一、KSM(Kernel SamePage Merging)
1、KSM简介
KSM允许内核在多个进程(包括虚拟机)之间共享完全相同的内存页,KSM让内核扫描检查正在运行中的程序并且比较他们的内存,若发现相同的内存页,就将相同的内存页合并成单一的内存页,标识为“写时复制”。
如果有进程试图去修改被标识为“写时复制”的合并的内存页时,就为该进程复制出一个新的内存页供其使用。

2、KSM提高内存的速度和使用效率
(1)相同的内存页被合并,减少了虚拟机的内存使用量,内存中的内容更容易被保存到CPU的缓存中。
(2)通过减少每个虚拟机实际占用的内存数量,让多个虚拟机占用的总内存之和大于物理内存,实现“内存过载”。

3、KSM劣势
(1)消耗一定的资源用于内存扫描,加重CPU的消耗。
(2)虚拟机由于修改被KSM合并的内存页,从而这些被修改的内存重新被复制出来占用内存空间,造成内存不足,从而使用swap分区。因此内存不足时,频繁使用swap交互,虚拟机性能下降。

二、KSM服务
KSM主要有两个服务:ksm和ksmtuned。

1、配置和监控ksm

ksm的配置文件:/sys/kernel/mm/ksm/*

kvm加大显存参数 kvm 内存_kvm加大显存参数


full_scans:已经对所有可合并的内存区域扫描过的次数。

pages_shared:正在使用中的共享内存页数量

pages_sharing:有多少内存页正在使用被合并的共享页,不包括合并内存页本身。这是实际节省的内存页数量。

pages_to_scan:在ksmd进程休眠之前会去扫描的内存页的数量。

pages_unshared:无重复内容而不可以被合并的内存页数量。

pages_volatile:因为内容很容易变化而不被合并的内存页数量。

run:控制ksmd是否运行。0:停止运行但是保存合并的内存页;1:马上运行ksmd;2:停止运行,并且分立已经合并的所有内存页。

sleep_millisecs:ksmd进程的休眠时间。

其中pages_to_scan、sleep_millisecs、run三个文件是可读写的,其他文件是只读的。

2、配置和使用ksmtuned
配置文件:/etc/ksmtuned.conf
ksmtuned会一直保持循环执行,以调节ksm服务运行。