Proactively Breaking Large Pages to Improve Memory Overcommitment Performance

相关资料

  • 作者
姓名 主页 dblp
Fei Guo Fei Guo Fei Guo
Seongbeom Kim Seongbeom Kim Seongbeom Kim
Ishan Banerjee Ishan Banerjee Ishan Banerjee

问题

当主机内存过量使用时,我们会衡量大页对工作负载性能的影响。由于使用大页会显著增加虚拟机内存消耗并降低页面共享,与使用小页相比,工作负载性能可能会大大降低。 然而,当主机有大量可用内存时,禁用大页通常会降低许多工作负载的性能。

实现

VMware ESXi内存管理基础原则

主机空闲内存的数量决定了空闲内存状态,根据不同的状态,ESXi将采取不同的技术来回收内存。主机内存有high和low这两个状态,状态转换阈值称为minFree,并根据主机内存大小进行预设。

当主机内存处于high状态时,仅使用页面共享来回收内存;当主机内存处于low状态时,ESXi会使用气球和swapping来回收内存。

拆分“冷”大页

识别不经常使用的大页,即“冷”大页,并允许它们在主机空闲内存充足时被拆分。 基本上,我们通过定期扫描大页的Accessed位,实现一个简单的“冷”大页检测器。 然后,Hypervisor会拆分包含可共享小页的“冷”大页。

clear 内存状态

当主机内存压力低时,拆分“冷”大页会降低主机内存消耗,性能影响可以忽略不计。 然而,当主机内存压力增加时,拆分“冷”大页可能依然使主机内存不足,主机内存最终达到low状态。 在这种情况下,提前打破所有大页(包括“热”的)是有益的,以便hypervisor可以通过页面共享抢先回收内存, 然后将气球技术或swapping回收的内存量最小化。 为了实现这一点,我们提出了一种在high状态和low状态之间的clear状态。

从high状态切换到clear状态的阈值,被称为high-to-clear。在clear状态下,任何大页如果包含可共享的小页,则可能会被拆分,并且不包含可共享的小页的大页仍然保留, ESXi中的大页分配和合并也都被禁用。

high-to-clear的动态调整

我们提出了一种基于空闲内存消耗率的high-to-clear调整机制。 本质上,如果主机空闲内存在clear状态时增加,我们将降低high-to-clear,以允许主机在将来重新进入high状态 ; 一旦我们检测到主机空闲内存迅速下降, high-to-clear将恢复为默认值。

页面扫描速率的动态调整

一般来说,扫描速率应根据主机内存消耗速率和虚拟机内存共享性进行设置。 例如,如果大页中较少的小页可共享,则扫描速率需要更高,以便从拆分的大页中拾取足够可共享的小页,反之亦然。 由于VM大页中的内存共享性在ESXi中是未知的,因此我们提出了一种使用抽样技术来估计客户机内存的可共享量。

总结

  • 识别“冷”大页,并允许在主机空闲内存足够时拆分它们
  • ESXi内存管理中添加了一个新的clear状态,在该状态下可以主动拆分所有大页。 实现基于主机内存消耗率调整clear状态阈值的策略。
  • 在clear状态下,使用提出的VM大页共享性估计器调整页面共享扫描速率,以通过页面共享有效地回收内存。

总的来说,通过较早地分享小页,可以减少需要通过昂贵的气球技术或swapping进行回收的内存量。