[破事水] 虚拟机多开 KSM 效果很显著

刚才试了一下KSM(Kernel Same-page Merge) 功能,它可以将虚拟机重复的内存页合并,节省内存使用

启用KSM
echo 1 > /sys/kernel/mm/ksm/run

QEMU默认已经是 mem-merge=on,所以不用设置

启动两个XP虚拟机,一个分配768M内存,另一个1G内存

ksmd经过几轮扫描后,内存占用逐渐从 2.0G 降低到 0.7G左右,效果非常显著

不过ksmd本身会消耗不少cpu资源

听说UKSM表现更好(更省CPU),但貌似UKSM不能发挥多核性能.
可以考虑把虚拟机的pagefile.sys之类放到一个单独的虚拟机硬盘上,然后这个单独的虚拟机硬盘放到tmpfs上.
这样虚拟机的pagefile.sys就可以被物理机上的zram设备压缩.
zram 貌似可以较为充分的利用多核性能.

刚了解了一下,UKSM是国人开发的,厉害

虚拟机我都是关闭页面文件的,XP有1G内存也差不多够用了?

个人感觉pagefile.sys设置到tmpfs上应该没太大速度区别(至少对人类用户而言)
但关键点是如果虚拟机的物理内存设置过小会导致虚拟机内的OS的内存回收算法很快陷入到类似死循环(不停试图交换)一样的状态而疯狂消耗CPU,尽管pagefile.sys在tmpfs上,但还是会变卡.
以上是我个人观察+猜测
1G是否够用我不太确定,感觉取决于具体用来做什么吧.

Mon Jan 1 17:34:41 CST 2018补充:
我XP的VirtualBox一般是pagefile.sys设置约2G,虚拟机物理内存根据用途情况设置96~512不等

据说XP的内存调度会非常积极地使用pagefile,类似linux设置很高的swapiness

为什么设置小内存大页面文件呢?这样做是什么原理
难道您同时开的虚拟机很多

这样可以省内存.
直接为虚拟机分配很大的物理内存会导致实机物理可用内存快速下降(基本上虚拟机内的OS启动完成后就完全占据了分配给虚拟机的物理内存)
实机可用内存快速下降就会导致实际OS中的缓存被丢弃,也影响虚拟机的IO缓存命中率.
pagefile.sys放在tmpfs上还有一个好处是可以随着swap被zram压缩.
只开一个虚拟机时我也是这么干的,个人没感觉有啥副作用.