Memory Resource Management in VMware ESX Server

此论文是OSDI’02上的一篇文章,影响力较大,今天特意总结一下,希望对读者会有所帮助。在本文中,shares的含义为权重(weights)。

相关资料

姓名 主页 谷歌学术 dblp
Carl A. Waldspurger Carl A. Waldspurger Carl A. Waldspurger Carl A. Waldspurger

摘要

VMware ESX Server是为了在虚拟机之间高效地复用硬件资源而设计的软件层。

气球技术回收了客户机中最不重要的页面; 空闲内存税可实现高效的内存使用,同时保障性能的隔离; 基于内容的页面共享则是利用透明的页面重映射技术来消除冗余。 这些技术相互结合,可以有效地支持过量使用内存的虚拟机工作负载。

内存回收机制

Overcommitment means that the total size configured for all running virtual machines exceeds the total amount of actual machine memory.

上述引用很好地说明了过量使用的含义,即所有运行虚拟机的配置内存之和超过了实际内存的容量。

气球技术

理想情况下,内存被回收一些的虚拟机应该表现地如同配置的内存更少一样, ESX Server使用气球技术与客户机操作系统协作来达到该目的。下图展示了这个过程:

  • 气球模块作为伪设备驱动程序或内核服务加载到客户机操作系统中,它通过专用通道与ESX Server进行通信
  • 当ESX Server 想要回收内存时,它会指示气球通过使用适当的本机接口在虚拟机内分配固定的物理页面来“膨胀”
  • ESX Server 通过指示气球释放先前分配好的页面来“放气”

页面调度机制

ESX Server优先使用气球技术来回收内存,但是 当气球技术使用不了或内存不足时,系统会使用页面调度机制。系统通过将页面交换到ESX Server swap区域来回收内存而无需客户机的参与。

内存共享

ESX Server 根据页面内容来识别页面副本,哈希用于有效识别具有潜在相同内容的页面。

shares vs 工作集

按shares分配

每个虚拟机都有一个shares值,系统按照shares的份额来按比例分配相应数量的内存。

动态算法min-funding revocation的思想是:当一个虚拟机想要更多的内存时,就从shares值最小的虚拟机中获取。

回收空闲内存

完全按比例分配内存的算法有一个明显局限性:忽略内存的使用情况。拥有较大shares的空闲虚拟机占用了大量内存却不使用,而拥有较小shares的活跃虚拟机因占用较少的内存而面临内存不足的处境,这样造成了系统内存利用率的降低。
ESX Server通过引入空闲内存税来解决上述问题,其基本思想是虚拟机为空闲页面付出比活跃页面更多的费用。 当内存不足时,ESX Server将优先从不积极使用内存的虚拟机回收页面。

总结

几个虚拟机运行在ESX Server中,例如当面临内存不足时,我们需要选择从哪个虚拟机中回收内存,此刻,就可以利用空闲内存税机制来选择最合适的虚拟机。而如何回收内存,系统则会根据不同的策略选择气球技术或者页面调度。同时,根据页面内容重删的技术可以节省内存,从而使系统更好地支持过量使用。