整个系统虚拟化允许我们将软件系统打包在自包含的虚拟机中,每个虚拟机运行自己的操作系统以及一组应用程序和服务。“虚拟硬件”的使用允许对机器部署进行敏捷的软件管理,并在位于同一位置的虚拟机之间提供强大的资源隔离,使现代云计算平台成为可能。然而,这些好处并不是完全免费的:额外的间接级别可能会导致运行时开销增加并降低性能。
过去十年,我们在解决这一问题上取得了巨大进步。由动态二进制重写引起的CPU虚拟化开销和由影子页表引起的内存虚拟化开销通过巧妙的算法和硬件辅助相结合来减少。剩下的一个关键问题是I/O虚拟化,最显著的问题是如何处理运行在10Gb/s或40Gb/s的高速网络带来的挑战。下面的文章展示了如何通过高速网络接口卡(nic)使虚拟机获得“裸金属”性能。
他们的出发点是使用直接设备分配(有时被称为“PCI直通”)。这里的想法是将网卡专用于虚拟机,并允许它直接访问设备寄存器。这意味着在虚拟机中运行的设备驱动程序将能够编写DMA传输程序来发送和接收数据包,就像在真正的机器上运行一样。将IOMMU配置为不允许对非所有物理内存进行传输,可以确保安全性。将虚拟化层排除在数据传输之外是一个巨大的胜利,这对降低性能开销大有帮助。但事实证明,还有另一个相当令人惊讶的问题:中断处理。
ELI的想法很巧妙,不仅适用于网络接口卡。经过一些调整,该方法应该能够扩展到多个核心、设备和虚拟机。
随着设备速度的提高,每秒的数据包数量也会增加,从而导致设备中断的速度增加。有各种各样的技术可以改善高中断负载,例如使用更大的包或批处理中断生成,但这些都有潜在的不良副作用,而且即使这样也只能部分缓解问题。例如,论文中的一个实验表明,即使使用自适应中断批处理,一个NIC也可以很容易地每秒产生数万个中断。这对于普通机器来说已经是一个问题,但对于虚拟机来说更糟糕,因为事实证明,它们会招致更高的中断处理成本。
正如作者解释的那样,处理在虚拟机中运行时发生的设备中断的标准实践需要两个“出口”:上下文切换,从来宾操作模式切换到主机操作模式。对于网络密集的工作负载,来自这些出口(以及它们匹配的重新进入客户操作模式)的开销可能会导致性能下降30% - 50%。这一观察结果直接引出了作者的观点:无出口中断(ELI)。
他们的解决方案分为两部分。第一种技术是配置系统以交付所有直接中断以客户操作模式运行的虚拟机,但安排那些不打算直接使用的虚拟机立即退出到主机。第二种技术是允许在虚拟机中运行的客户操作系统直接向硬件确认它已经处理了中断。这需要很多聪明的工作安全透明,阅读论文了解更多的细节!但关键是,这两种技术结合在一起,允许虚拟机在使用10Gb/s网卡时获得接近100%的裸金属性能。
ELI的想法很巧妙,不仅适用于网络接口卡。通过一些调整和附加特性,通用方法应该能够扩展到多个核心、多个设备和多个虚拟机。如果是这样的话,也许我们终于可以说虚拟化性能是一个解决了的问题……现在。
数字图书馆是由计算机协会出版的。版权所有©2016 ACM股份有限公司
没有发现记录