acm-header
登录

ACM通信

研究突出了

无出口中断虚拟机的裸金属性能


具有无出口中断的虚拟机的裸金属性能,插图

来源:iStockPhoto.com

直接设备分配允许客户虚拟机在不涉及主机的情况下与I/O设备通信,从而提高了客户虚拟机的性能。但是,即使有了设备分配,客户机仍然无法达到裸金属性能,因为主机将拦截所有中断,包括那些由已分配设备生成的中断,以便向客户机发出完成其I/O请求的信号。主机的参与会导致多个不必要的客户/主机上下文切换,这会严重影响I/O密集型工作负载的性能。为了解决这个问题,我们提出了无出口中断(ELI),这是一种在来宾虚拟机中处理中断的纯软件方法直接而且安全。通过将主机从中断处理路径中移除,ELI通过1.3×1.6×提高了未修改的、不受信任的客户机的吞吐量和延迟,允许它们即使在最苛刻的I/ o密集型工作负载下也能达到97100%的裸金属性能。

回到顶部

1.简介

I/O活动是虚拟环境性能的主要因素,1725激励设备直接赋值其中主机直接将物理I/O设备分配给客户虚拟机。这些设备包括磁盘控制器、网卡和gpu。直接设备分配提供了比其他I/O虚拟化方法更好的性能,因为它几乎完全从客户机的I/O路径中删除了主机。如果没有直接的设备分配,I/ o密集型工作负载可能会出现不可接受的性能下降。171925不过,在x86 cpu(最流行的虚拟化平台)上,可以直接分配独自一人不允许I/ o密集型工作负载达到裸金属(非虚拟)性能691625;根据我们的测量,这样的工作负载只能达到裸金属性能的6065%。我们发现几乎整个性能差异是由指定设备的中断引起的。

I/O设备产生中断来通知CPU I/O操作的完成。在虚拟化设置中,每个设备中断都会触发昂贵的开销退出16导致客户端挂起,主机恢复,无论是否分配了设备。按照x86规范的要求,主机首先向硬件发出完成物理中断的信号。然后它会向客户端注入一个对应的(虚拟)中断,并恢复客户端的执行。客户端接着处理虚拟中断,并像主机一样发出完成信号,认为它直接与硬件交互。此操作触发另一个退出,提示主机模拟虚拟中断的完成并再次恢复guest。中说明了处理中断的事件链图1

由中断引起的客户机/主机上下文切换为非i / o密集型工作负载带来了可忍受的开销,这使得以前的一些虚拟化研究声称它们实现了裸金属性能。514但是我们的测量结果表明,这种开销很快就不再是可容忍的了,这会对只需要50mbps吞吐量的客户产生不利影响。值得注意的是,以前的研究通过放松保护来改善虚拟I/O1314或者通过修改客人,5而我们主要关注最具挑战性的虚拟化场景,即不受信任和未修改的客户机。

之前的许多研究都认为干扰是开销的主要来源,615许多人提出了减少它的技术,无论是在裸金属环境下10212326在虚拟化设置中3.91625.原则上,可以调优设备及其驱动程序来产生更少的中断,从而减少相关的开销。但在实践中这样做绝非小事22并且会对延迟和吞吐量产生负面影响。

我们的方法基于这样一种观察:运行I/ o密集型客户机的核心所体验到的高中断率主要是由分配给客户机的设备产生的。事实上,我们测量每秒超过150K物理中断的速率,即使使用标准技术来减少中断的数量,例如中断合并3.2126而且混合轮询。1023如上所述,所产生的客户机/主机上下文切换几乎是导致性能低于裸金属设备的唯一原因。为了消除这些开关,我们建议使用无出口中断(ELI),这是一种在来宾系统中直接以安全方式处理物理中断的纯软件方法。

使用ELI,物理中断被直接传递给来宾,允许他们在没有主机参与的情况下处理设备的中断;ELI确保每个客户机将所有其他中断转发给主机。对于x86硬件,中断是通过一个由软件控制的函数指针表来传递的,这样硬件就可以调用k当中断类型为k火灾。ELI没有使用来宾的表,而是维护、操作和保护一个“影子表”,这样与所分配设备关联的条目就指向来宾的代码,而其他条目则被设置为触发到主机的出口。

我们用微观和宏观基准对ELI进行了实验评估。我们的基线配置使用标准技术来减少(合并)中断的数量,证明ELI的好处超越了最先进的技术。我们展示了ELI减少了CPU开销,从而限制了可达到的吞吐量,从而将客户机的吞吐量和延迟提高了1.3×1.6×。值得注意的是,到目前为止,I/ o密集型客户机的裸金属吞吐量被限制在6065%,而使用ELI时,它们的性能达到了最佳性能的97100%以内。因此,ELI使得整合传统的数据中心工作负载成为可能,这些工作负载由于不可接受的性能损失而仍然是非虚拟化的。

回到顶部

2.动机及相关工作

在过去的几十年里,中断一直是硬件设备向操作系统发送异步事件的主要方法。7使用中断来通过轮询设备来接收通知的主要优点是,在等待中断的同时,处理器可以自由地执行其他任务。这种优势适用于中断相对较少发生的情况,在高性能存储和网络适配器出现之前就是这样。使用这些设备,CPU可能会被中断淹没,从而没有时间执行除中断处理程序之外的代码。18当操作系统在客户端运行时,中断的成本更高,因为每个中断都会导致多个退出。16ELI消除了大多数这些出口及其相关的开销。

在本节的其余部分中,我们将介绍减少中断引起的开销的现有方法,并重点介绍ELI与这些方法相比的新颖性。我们将这些方法细分为两类。

*2.1.通用中断处理方法

我们现在研究同样适用于裸金属环境和虚拟化环境的方法。

轮询完全禁用中断,并定期轮询设备以获取新事件。这样做的好处是,处理设备事件变得同步,允许操作系统决定何时轮询,从而限制处理程序调用的数量。缺点是增加了延迟、增加了功耗(因为处理器不能进入空闲状态)以及在没有事件等待时浪费了周期。如果轮询是在另一个核心上完成的,则延迟会得到改善,但会浪费一个核心。

一个混合动力减少中断处理开销的方法是在使用中断和轮询之间动态切换。1018Linux默认通过NAPI机制使用这种方法。23在实践中,中断和轮询之间的切换并不总是很好,部分原因是预测设备在未来将发出的中断数量的复杂性。

另一种方法是中断合并3.2126其中,操作系统程序的设备发送一个中断在一个时间间隔或一个中断每几个事件,相对于一个中断每个事件。与混合方法一样,合并会延迟中断,因此可能会增加延迟15以及突发TCP流量。26当工作负载在客户机中运行时,决定用于合并的正确模型和参数尤其复杂。9让它适合各种各样的工作负载是困难的,如果不是不可能的话。3.22与合并不同,ELI不会减少中断的数量;相反,它简化了对虚拟机中断的处理。因此,合并和ELI是互补的,正如我们在5.4节中所示:合并减少了中断的数量,而ELI减少了它们的成本。

第5节中的所有计算都是使用默认的Linux配置执行的,该配置结合了混合方法(通过NAPI)和合并。

*2.2.Virtualization-specific方法

使用模拟的或半虚拟的5设备在主机端提供了很大的灵活性,但其性能远远低于设备分配,更不用说裸金属了。刘16结果表明,SR-IOV设备的设备分配可以以高达2倍的CPU利用率为代价实现接近裸金属的吞吐量。他还论证了中断对性能有很大的影响,并且是传输和接收路径的主要开销。

还有软件技术2通过找到退出指令块并对整个块只退出一次来减少出口的数量。当开销的主要原因是来宾代码时,这些技术可以提高运行虚拟机的效率。当原因在外部中断时,例如对于使用SR-IOV的I/O密集型工作负载,这样的技术不会减轻开销。

盾等。9讨论在Xen hypervisor中实现SR-IOV支持的框架。他们的结果表明SR-IOV可以在10Gbps网络接口控制器(NIC)下实现线速率。但是,CPU利用率是裸金属的148%。此外,这个结果是使用自适应中断合并实现的,这增加了I/O延迟。

有几项研究试图减少虚拟环境中前述的额外中断开销。维克3.讨论了在虚拟存储设备中进行中断合并的一种方法,并在宏基准测试中显示了高达5%的改进。他们的方法使用“飞行中的命令”的数量来决定需要合并多少。因此,正如作者所说,由于缺乏飞行中的命令(或数据包)信息,这种方法不能用于网络设备。盾等。8通过在来宾端和接收端伸缩中轮询使用虚拟中断合并,以减少半虚拟环境中的网络开销。正如上面所讨论的,轮询有其缺点,ELI改进了更面向性能的设备分配环境。

NoHype13认为现代管理程序容易受到来宾的攻击。在NoHype模型中,hypervisor是一个薄层,它启动、停止并对客户机执行其他管理操作,但不涉及其他方面。客人使用指定的设备,中断直接传递给客人。没有提供实现或性能结果的细节。相反,作者着重描述了该模型的安全性和其他好处。

回到顶部

3.X86中断处理

为了将ELI的设计置于上下文中,我们首先简要概述一下当前在x86上如何进行中断处理。

*3.1.在裸金属环境中的中断

X86处理器使用中断和异常来通知系统软件传入的事件。中断是由外部实体(如I/O设备)产生的异步事件;异常是同步事件,例如由正在执行的代码引起的页面错误。在这两种情况下,当前正在执行的代码被中断,执行跳转到预先指定的中断或异常处理程序。

x86操作系统使用一个构建在内存中的表——中断描述符表(IDT)为每个中断和异常指定处理程序。这个表最多包含256个条目,每个条目包含一个指向处理器的指针。每个体系结构定义的异常或中断都有一个数字标识符——异常号或中断向量它用作表的索引。操作系统可以为所有核心使用一个IDT,也可以为每个核心使用单独的IDT。操作系统通过将IDT的虚拟内存地址写入中断描述符表寄存器(IDTR)来通知处理器每个核心的IDT在内存中的位置。由于IDTR保存着IDT的虚拟(而不是物理)地址,操作系统必须始终保持相应的地址映射在活动页表集中。除了表在内存中的位置,IDTR还保存表的大小。

当外部I/O设备引发中断时,处理器读取IDTR的当前值以找到IDT。然后,使用中断向量作为IDT的索引,CPU获得相应处理程序的虚拟地址并调用它。当中断处理程序运行时,进一步的中断可能被阻塞,也可能不被阻塞。

系统软件需要执行一些操作,例如启用和禁用中断、通知中断处理程序完成、配置定时器中断和发送处理器间中断(IPIs)。软件通过本地高级可编程中断控制器(LAPIC)接口执行这些操作。LAPIC有多个寄存器,用于配置、交付和完成中断的信号。通过写入中断结束(EOI) LAPIC寄存器来发出中断完成的信号,这对ELI特别重要。最新的LAPIC接口x2APIC11使用特定于模型的寄存器(MSR)公开它的寄存器,这些寄存器通过“读MSR”和“写MSR”指令访问。以前的LAPIC接口只在预定义的内存区中公开寄存器,该内存区通过常规的加载和存储指令进行访问。

*3.2.虚拟环境中的中断

x86硬件虚拟化11提供两种操作模式,客人模式而且主机模式。在主机模式下运行的主机使用来宾模式创建用于运行来宾虚拟机的新上下文。一旦处理器开始运行客户机,将继续以客户机模式执行,直到某些敏感事件强制退出到主机模式。主机处理任何必要的事件,然后恢复来宾程序的执行,从而进入来宾模式。这些出口和条目是虚拟化开销的主要原因,1619这在I/O密集型工作负载中尤其明显。1620.24它来自于在上下文中切换所花费的处理器周期、在主机模式下处理退出所花费的时间以及由此产生的缓存污染。

这项工作的重点是运行未经修改和不受信任的操作系统。一方面,未修改的客户机不知道它们在虚拟机中运行,它们期望完全像在裸机上那样控制IDT。另一方面,主机不能轻易地将每个核心的IDT控制权交给不受信任和未修改的客户机。这是因为完全控制物理IDT意味着完全控制核心。因此,x86硬件虚拟化扩展为每种模式使用不同的IDT。每个核心上的来宾模式执行由来宾IDT控制,而主机模式执行由主机IDT控制。当CPU以主机模式或客户模式执行时,I/O设备可以引发物理中断。如果中断在CPU处于来宾模式时到达,CPU会强制退出,并通过主机IDT将中断交付给主机。

来宾接收虚拟中断,而虚拟中断不一定与物理中断相关。由于主机收到了相应的物理中断,所以主机可以决定用一个虚拟中断注入来宾程序,或者主机可以决定用自己制造的虚拟中断注入来宾程序。主机通过guest IDT注入虚拟中断。当处理器在注入后进入来宾模式时,来宾接收并处理虚拟中断。

在中断处理期间,客户机将访问其LAPIC。就像IDT一样,对核心的物理LAPIC的完全访问意味着对核心的完全控制,因此主机不能轻易地让不受信任的来宾访问物理LAPIC。对于使用第一代LAPIC的客户机,当客户机访问LAPIC内存区域时,处理器强制退出。对于使用x2APIC的客户机,主机根据MSR位图捕获LAPIC访问,该位图指定客户机不能直接访问的敏感MSR。当客户机访问敏感MSRs时,执行将退出到主机。通常,x2APIC寄存器被认为是敏感的msr。

*3.3.来自指定设备的中断

虚拟化性能的关键是CPU将大部分时间用于客户模式,运行客户,而不是在主机中处理客户退出。I/O设备仿真和半虚拟化驱动程序5对于在客户机中运行的I/O密集型工作负载,会带来巨大的开销。616该开销是由主机参与其客户的I/O路径(编程I/O (PIO))、内存映射I/O (MMIO)、直接内存访问(DMA)和中断引起的。

直接设备分配是I/O虚拟化的最佳性能方法916因为它消除了主机在I/O路径中的一些参与。通过设备分配,客户机可以直接访问分配的设备。客户I/O操作绕过主机,直接与设备通信。如前所述,设备DMA也会绕过主机;设备直接对客户内存进行DMA访问。然而,由指定设备产生的中断仍然需要主机干预。

理论上,当主机将设备分配给客户时,它还应该将设备生成的物理中断分配给该客户。不幸的是,当前的x86虚拟化只支持两种模式:要么将核心上的所有物理中断交付给当前正在运行的客户机,要么将来宾模式下的所有物理中断退出并交付给主机。不受信任的客户机可以处理自己的中断,但绝不允许它处理主机和其他客户机的中断。因此,在ELI之前,主机别无选择,只能将处理器配置为在何时强制退出任何物理中断以来宾模式到达。然后,主机检查中断,并决定是自己处理它还是将它注入相关的客户机。

图1描述具有基线设备分配的中断处理流程。来自客户机分配的设备的每个物理中断强制从客户机到主机至少两个出口:当中断到达时和当客户机发出结束中断处理的信号时。正如我们在第5节中所展示的,与中断相关的出口是I/O密集型工作负载中虚拟化开销的主要贡献者。

回到顶部

4.艾丽:设计和实现

ELI允许未修改和不受信任的客户机直接且安全地处理中断。ELI不需要任何客户修改,因此应该适用于任何操作系统。它不依赖于任何特定于设备的特性,因此应该适用于任何指定的设备。

*4.1.Exitless中断交付

ELI的设计是由观察到的到达给定核心的所有物理中断都针对在该核心上运行的客户。这是由几个原因造成的。首先,在高性能部署中,客户机通常有自己的物理CPU内核(否则它们将浪费太多时间进行上下文切换);二是高性能部署采用SR-IOV设备分配;第三,中断速率通常与执行时间成正比。每个客户机运行的时间越长,它从其分配的设备接收到的中断就越多。根据上述观察,ELI利用可用的硬件支持来交付所有在一个给定的核心上对在其上运行的客户的物理中断,因为它们中的大多数应该由该客户处理,并强制(未修改的)客户将所有应该由主机处理的中断反射给主机。

guest OS继续准备和维护自己的IDT。ELI不是使用这个IDT运行客户机,而是使用主机准备的另一个IDT以客户机模式运行客户机。我们称第二位客人为IDT影子踊跃参与。就像影子页表可以用来虚拟化客户MMU一样,15IDT跟踪可用于虚拟化中断交付。中描述的这种机制图2并描述如下,不需要客人合作。

通过跟踪客户的IDT,主机可以显式地控制CPU在中断交付时调用的中断处理程序。主机可以配置影子IDT,将已分配的中断直接交付给客户的中断处理程序,或者对未分配的中断强制退出。导致退出的最简单方法是强制CPU生成异常,因为异常可以被主机选择性地捕获,并且如果主机有意错误配置影子IDT,那么很容易生成异常。对于我们的实现,我们决定主要通过生成不存在(NP)异常强制退出。每个IDT条目都有一个present位。在调用一个条目来传递中断之前,处理器检查该条目是否存在(设置了当前位)。交付给NP项的中断会引发NP异常。ELI对影子IDT的配置如下:对于属于分配给来宾的设备的异常和物理中断,影子IDT条目从来宾的原始IDT复制并标记为present。影子IDT中的每一个其他条目都应该由主机处理,因此被标记为不存在,以便在处理器试图调用处理程序时强制出现NP异常。此外,当出现NP异常时,主机配置处理器强制从客户模式退出到主机模式。

任何反映到主机的物理中断在主机中都作为NP异常出现,必须转换回原始中断向量。主机检查异常原因。如果退出实际上是由物理中断引起的,那么主机将引发一个与物理中断相同向量的软件中断,这将导致处理器调用适当的IDT条目。如果退出不是由物理中断引起的,那么这是一个真正的客户NP异常,应该由客户处理。在这种情况下,主机将异常注入回客户端。正常执行中很少出现真正的NP异常。

主机有时还需要向来宾注入由主机模拟的设备(例如键盘)引发的虚拟中断。这些中断向量将在标记为NP的IDT阴影中有它们的条目。为了通过来宾IDT处理程序交付这种虚拟中断,ELI进入一个特殊的注入模式通过将处理器配置为在任何物理中断时导致退出,并使用原始客户机IDT运行客户机。ELI然后将虚拟中断注入到guest中进行处理,这与通常的做法类似(图1).在来宾信号完成注入的虚拟中断之后,ELI通过重新配置处理器来离开注入模式,让来宾直接处理物理中断,并使用影子IDT恢复来宾信号。正如我们稍后在第5节中所展示的,注入的虚拟中断的数量比指定设备产生的物理中断的数量要小几个数量级。因此,在注入模式下运行时,由于物理中断而导致的出口数量可以忽略不计。

即使所有中断都需要退出,ELI也不会比基线设备分配慢。出口的数量不会增加,每次出口的成本保持不变。普通操作系统在系统初始化后,很少修改IDT内容。进入和离开注入模式只需要两次内存写入,一次是更改IDT指针,另一次是更改CPU执行模式。

*4.2.放置阴影IDT

对于在客户机内存中的何处放置影子IDT有几个要求。首先,它应该对来宾用户隐藏,即放在来宾用户通常无法访问的内存中。其次,它必须放在始终映射在客户机内核地址空间中的客户机物理页面中。这是x86架构的需求,因为IDTR需要一个虚拟地址。第三,由于客人是未经修改和不受信任的,所以主机不能依靠任何客人的合作来放置影子IDT。ELI通过将影子IDT放置在设备的PCI基地址寄存器(BAR)的一个额外页面中来满足所有这三个要求。

PCI设备通过BAR寄存器向系统软件公开它们的寄存器,就像内存一样。bar指定物理内存中设备寄存器的位置和大小。Linux和Windows驱动程序将其设备的PCI BAR的完整大小映射到内核的地址空间,但它们将只访问映射的BAR中已知与设备寄存器对应的特定位置。将阴影IDT放置在附加在设备BAR末端的内存页中会导致客户(1)将它映射到它的地址空间,(2)保持映射,(3)在正常操作期间不访问它。所有这些都是客人正常工作的一部分,不需要客人的任何意识或合作。为了检测对客户IDT的运行时更改,主机还对影子IDT页面进行写保护。

*4.3.配置来宾和宿主向量

主机和客户机都不能精确地控制指定的设备中断何时触发。由于主机和来宾可能在接收中断的核心上运行不同的时间,两者都必须准备好处理相同的中断。(主机通过将中断注入客户端来处理中断。)中断向量还控制该中断相对于其他中断的优先级。因此,ELI确保对于每个设备中断,各自的来宾和主机中断处理程序被分配到相同的向量。

*4.4.Exitless中断完成

尽管ELI IDT跟踪在不需要主机干预的情况下向客户机交付硬件中断,但发送中断完成信号仍然会强制退出到主机模式。此退出是由客户机发出中断完成的信号造成的。如3.2节所述,来宾通过向EOI LAPIC寄存器写入完成信号。这个寄存器要么作为LAPIC区域(旧LAPIC接口)的一部分公开给来宾,要么作为x2APIC MSR(新LAPIC接口)公开。对于旧的接口,每次LAPIC访问都会导致退出,而对于新接口,主机可以根据每个x2apic寄存器来决定哪个寄存器访问导致退出。

在ELI之前,主机将CPU的MSR位图配置为当来宾访问EOI MSR时强制退出。ELI通过配置MSR位图使客户写入EOI寄存器时不会导致退出,从而将x2APIC EOI注册直接暴露给客户。将这种中断完成技术与ELI IDT跟踪相结合,消除了关键中断处理路径上的出口。

来宾不知道物理中断和虚拟中断之间的区别。它们以相同的方式发出所有中断完成的信号,即写入EOI寄存器。当主机注入一个虚拟中断时,相应的完成应该到主机进行模拟,而不是到物理EOI寄存器。因此,在注入模式(在章节4.1中描述)期间,主机临时诱捕访问EOI寄存器。一旦客户端发出完成所有挂起的虚拟中断的信号,主机就会离开注入模式。

*4.5.保护

所考虑的威胁模型的全部细节可在全文中获得。在这里,我们简要地描述了可能的攻击以及ELI所采用的防止攻击的机制。

恶意客户端可能试图通过永远禁用中断来窃取CPU时间。为了防止这种攻击,ELI使用抢占计时器x86的特性,它在经过一段可配置的时间之后触发无条件退出。

行为不端的客户端可能不发出中断完成的信号,从而屏蔽主机中断。为了防止这种情况发生,ELI发出信号,表示退出后仍在服务中的任何分配的中断完成。为了保持正确性,当ELI检测到客户端没有完成之前交付的任何中断时,它会回到注入模式,直到客户端发出信号,表示所有服务中中断都完成了。因为所有控制CPU可中断性的寄存器都在退出时重新加载,所以客户机不能影响主机的可中断性。

恶意的客户机可以尝试阻塞或使用关键的物理中断,例如热中断。为了防止这种攻击,ELI使用以下机制之一。如果有一个核心不运行任何启用ELI的客户机,ELI就会将关键中断重定向到那里。如果没有这样的核心可用,ELI使用非掩码中断(NMIs)和IDT限制的组合。

nmi触发无条件退出;它们不能被客人阻止。ELI将关键中断重定向到核心的单个NMI处理程序。所有关键中断都注册到这个处理程序中,每当NMI发生时,处理程序调用所有注册的中断向量来识别哪个关键中断发生了。NMI共享的运行时成本可以忽略不计(因为关键中断很少发生)。然而,一些设备和设备驱动程序可能会锁住,或者在没有引发中断的情况下调用它们的中断处理程序。

对于那些处理程序只能在中断实际发生时才被调用的关键中断,ELI使用互补的粗粒度IDT限制机制。IDT限制在IDTR寄存器中指定,该寄存器受ELI保护,不能由来宾更改。IDT限制减少了影子IDT的限制,使所有矢量超过限制的中断触发通常罕见的通用保护异常(GP)。与NP异常类似,GP被宿主截获并处理。没有事件优先于IDTR限制检查,11因此,当调用时,所有超过该限制的处理程序都保证捕获到宿主。

回到顶部

5.评价

我们在KVM管理程序中实现ELI。本节评估我们实现的性能。

*5.1.方法和实验设置

我们测量并分析ELI对分配给客户虚拟机的高吞吐量网卡的影响。网络设备是设备分配最常见的用例,因为它们的高吞吐量,而且SR-IOV网卡可以很容易地将一个物理网卡分配给多个客户机。我们使用吞吐量和延迟来度量性能,并对比虚拟化和裸金属设置所获得的结果,以证明前者可以接近后者。如前所述,注重性能的应用程序通常会将整个核心奉献给来宾。我们只对这个案例进行评估。

我们的测试机器是一台IBM System x3550 M2服务器,配备Intel Xeon X5570 cpu, 24GB内存,Emulex OneConnect 10Gbps网卡。我们使用另一个类似的远程服务器(通过10Gbps光纤直接连接)作为工作负载生成器和I/O事务的目标。来宾模式和裸金属配置在单核中执行;每个内存分配1GB。所有的安装都运行Ubuntu 9.10和Linux 2.6.35。

我们在KVM管理程序(它是Linux 2.6.35的一部分)和QEMU-KVM 0.14.0上运行所有客户机。为了检查ELI在其他设置中是否正确运行,我们还将其部署在使用不同设备(BCM5709 1Gbps网卡)和不同操作系统(Windows 7)的环境中;我们发现ELI确实运作正常。我们使用基线设备分配(即未修改的KVM)、ELI和没有虚拟化的裸金属系统来评估和比较性能。

我们将管理程序配置为为客户提供2MB的内存巨大的页面以及二维页表。巨大的页面最小化了二维分页开销并降低了TLB压力。我们注意到只有主机使用大页面;在所有情况下,客户机仍然使用默认的4KB页面大小操作。我们在没有大页面的情况下对性能进行了量化,发现它们对基线和ELI运行的性能都有类似的提高(没有显示数据)。

回想一下,ELI利用x2APIC硬件来避免中断完成时的退出。自Sandy Bridge微架构以来,x2APIC在每一个Intel x86 CPU中都可用。可惜,我们用于评估的硬件不支持x2APIC。尽管如此,为了衡量ELI利用x2APIC硬件的好处,我们略微修改了我们的Linux客户机,以模拟x2APIC行为。具体来说,我们将物理LAPIC和一个控制标志公开给来宾,以便来宾可以根据该标志对虚拟LAPIC执行EOI(强制退出)或物理LAPIC(没有退出)。我们验证了我们的方法符合发布的规范。

*5.2.吞吐量

I/O虚拟化性能在I/O密集型的工作负载中受到的影响最大,并且会引起许多中断。我们通过测量三个众所周知的网络密集工作负载示例来开始评估,并表明对于这些基准而言,ELI比基线设备分配提供了显著(4966%)的吞吐量提高,并且接近(03%)达到裸金属性能。

我们考虑以下三个基准:NetperfTCP流,它打开到远程机器的单个TCP连接,并使许多快速write ()尽可能指定大小的调用;ApacheHTTP服务器,使用远程测量ApacheBench从多个并发线程重复请求一个静态页面;而且Memcached,一个高性能的内存中的键值存储服务器,使用Memslap基准测试发送的随机序列得到(90%)和(10%)的请求。

我们使用完全加载被测试机器核心的参数来配置每个基准测试(这样就可以比较吞吐量),但不会使测试机器饱和。我们将Netperf配置为执行256字节的写操作,ApacheBench从4个并发线程请求4KB静态页面,Memslap从4个线程发出64个并发请求。

图3说明ELI如何提高这三个基准的吞吐量。每个基准测试都在裸金属环境和两个虚拟化设置下运行:基线设备分配和ELI设备分配。

图中显示,基准设备分配性能仍然大大低于裸金属性能:客户机上的Netperf吞吐量为裸金属吞吐量的60%,Apache为65%,Memcached为60%。通过ELI, Netperf实现了98%的裸金属吞吐量,Apache实现了97%,Memcached实现了100%。很明显,使用ELI可以显著提高吞吐量,Netperf、Apache和Memcached分别提高63%、49%和66%。

*5.3.执行分解

将执行时间分解为主机、来宾和开销组件使我们能够更好地理解ELI如何以及为什么提高来宾组件的性能。表1显示了Apache基准测试的细分(Netperf和Memcached出现在全文中)。我们在这里总结了三个基准测试的结果。

使用ELI的客户机性能应该更好,因为客户机获得了更大的CPU份额(主机使用更少),并且/或因为客户机运行时运行效率更高。使用基线设备分配,只有6069%的CPU时间花在客户机上;其余部分在主机中处理退出。ELI消除了大多数出口,从而减少了在主机上花费的时间(下降到12%)和出口数量(下降到每秒7641118)。

在基线设备分配中,所有中断到达主机,然后注入到客户机。注入速率略高于中断速率,因为主机注入了额外的虚拟中断,如计时器中断。当使用ELI时,“在主机中处理”的中断数量非常少(103207),因为CPU在主机上运行的时间比例要低得多。

基线设备分配被“IRQ窗口”退出进一步减慢:在裸金属上,当中断被阻塞时发生设备中断,中断将稍后由LAPIC硬件交付。但是当客户正在运行时,中断总是导致立即退出。主机希望将这个中断注入客户端(如果它是来自已分配设备的中断),但是如果客户端中断被阻塞,则不能。x86架构的解决方案是在启用“IRQ窗口”的情况下运行客户机,一旦客户机启用中断,就请求退出。在基线设备分配运行中,我们每秒钟看到78019069个这样的出口。ELI通过消除大多数注入,在很大程度上消除了IRQ窗口开销。因此,正如预期的那样,ELI将出口数量从基线设备分配运行中的90,506大幅削减至123134,仅为7641118。

*5.4.中断速率影响

上一节中的基准测试表明,对于I/O密集型工作负载,ELI比基线设备分配显著提高了吞吐量。但是,由于工作负载在I/O上花费的时间更少,而在计算上花费的时间更多,ELI的改进似乎不会那么明显。尽管如此,与直觉相反,我们现在将展示ELI继续提供相对较大的改进,直到我们达到相当高的每i /O计算比(和相当低的吞吐量)。为此,我们修改Netperf基准测试,以对写入流的每个字节执行指定数量的额外计算。这类似于许多有用的服务器工作负载,服务器在发送响应之前进行一些计算。

计算与I/O的比率的一个有用的度量是周期/字节,产生一个字节输出所花费的CPU周期数;这个比率很容易测量为CPU频率(周期/秒)和工作负载吞吐量(字节/秒)的商。注意,周期/字节与吞吐量成反比。图4描述了ELI的改善和中断速率是该比率的函数。如图所示,直到60个周期/字节(相当于吞吐量只有50mbps)之后,eli的改进保持在25%以上,中断速率保持在30K和60K之间。如下所示,由于NIC(合并中断)和Linux驱动程序(使用NAPI)的原因,中断速率保持在这个范围内,如果没有这些机制,它们会更高。由于ELI降低了处理中断的开销,它的收益与它们的速率成正比,这一事实解释了为什么在一系列计算i /O值上的改进是相似的。

现在,我们继续研究ELI的改进对NIC完成的合并量的依赖,这些合并量立即转化为生成的中断量。我们的NIC对合并施加了一个可配置的上限,允许用户设置持续时间T,这样网卡不会每个触发一个以上的中断T(长T意味着更少的中断)。我们将NIC的合并上限设置为以下值:16秒,24秒,32秒,…96年代。图5绘制相关实验的结果(曲线上的数据表示。T).由于ELI,更高的中断率意味着更高的节省。即使使用最大的合并,ELI仍然比基线提高10%的性能。ELI在本节描述的所有实验中至少实现了99%的裸金属通量。这些结果表明,当使用ELI时,聚结对吞吐量的影响较小。因此,可以使聚结的粒度更细,从而避免由粗聚结引起的延迟增加。

*5.5.延迟

通过删除外部中断导致的出口,ELI大大减少了向客户交付中断所需的时间。这段时间对于延迟敏感的工作负载非常关键。我们使用Netperf UDP请求-响应来测量ELI的延迟改进,它发送一个UDP包,并在发送下一个之前等待一个答复。为了模拟一个繁忙的客户机,它与一个对延迟敏感的应用程序一起工作,我们在客户机中运行一个繁忙循环。结果是表2显示,基线设备分配增加了8.21 s裸金属延迟,ELI将这一差距减少到仅0.58 s,这在裸金属延迟的98%以内。

回到顶部

6.之后

在我们最初的ASPLOS 2012论文中,我们敦促硬件供应商添加硬件支持,以简化对来宾虚拟机的直接中断交付的实现。我们认为,ELI所展示的实质性性能改进值得努力添加这样的支持。我们高兴地报告,自那时以来,已在这方面采取了一些积极步骤。

为了减轻中断交付造成的一些开销,管理程序现在可以使用英特尔的“虚拟APIC”(APICv)特性。假设一个guest当前运行在核心上C1.管理程序可以安排一些事情,以便在不同的核心上触发相关的(物理)中断C2在主机模式下运行。当中断到达时C2, APICv允许管理程序将相应的(虚拟)中断“转发”到C1向客人没有诱导退出。虽然这样的方案消除了客人不必要的退出,但由于两个原因,它不如ELI。首先,它需要专用的主机内核(比如C2)用于重定向来宾中断。其次,它增加了中断交付延迟,因为它们必须首先由hypervisor在C2只有这样才能送到客人那里C1

英特尔和AMD都表示,他们打算在硬件上支持类似eli的直接交付。12一些ARM芯片已经支持这种交付。4然而,目前还不清楚这种硬件支持是否会兑现其承诺。例如,Intel的第一代实现将把每个来宾中断交付给某个核心。因此,对于操作系统在多个客户内核之间传播中断的多核客户,该实现可能无法使用。

回到顶部

7.结论

高虚拟化性能的关键是CPU将大部分时间用于来宾模式,运行来宾程序,而不是在主机上处理来宾程序退出。然而,目前的x86虚拟化方法需要主机参与关键中断处理路径,从而导致多个出口。结果是I/O性能下降。我们建议通过引入ELI来消除不必要的退出,ELI是一种让来宾直接且安全地处理中断的方法。ELI建立在以前减少虚拟化开销的许多努力的基础上,最终使不受信任和未修改的虚拟机能够达到近乎裸金属的性能,即使对于最I/ o密集的工作负载也是如此。考虑到这一点,芯片厂商的下一个逻辑步骤似乎是扩展发布的中断体系结构,以支持硬件中的ELI范式,从而简化其实现。

回到顶部

致谢

本文中提出的研究结果部分由欧共体第七框架计划([FP7/20012013])在#248615 (IOLanes)和#248647 (ENCORE)赠款协议下支持。

回到顶部

参考文献

1.x86虚拟化软件和硬件技术的比较。在美国计算机学会对编程语言和操作系统的架构支持(2006)。

2.Agesen, O., Mattson, J., Rugina, R., Sheldon, J.避免硬件虚拟化出口的软件技术。在USENIX年度技术会议(2012), 373385。

3.Ahmad, I., Gulati, A., Mashtizadeh, A. vIC:虚拟机存储设备IO的中断合并。在USENIX年度技术会议(2011)。

4.手臂有限公司。Arm通用中断控制器架构2.0版。Arm ihi 0048b, 2011。

5.Barham, P., Dragovic, B., Fraser, K., Hand, S., Harris, T., Ho, A., Neugebauer, R., Pratt, I., Warfield, A. Xen和虚拟化的艺术。在美国计算机学会操作系统原理研讨会(2003)。

6.Ben-Yehuda, M., Day, m.d., Dubitzky, Z., Factor, M., har' el, N., Gordon, A., Liguori, A., Wasserman, O., Yassour, b.a。海龟项目:嵌套虚拟化的设计和实现。在USENIX操作系统设计与实现研讨会(OSDI)(2010)。

7.科德,E.F.先进的电脑。第3卷,纽约:学术出版社,1962,77153。

8.董勇,徐东,张勇,廖刚。基于中断合并和虚拟接收侧扩展的网络I/O虚拟化优化。在集群计算国际会议(Cluster)(2011)。

9.董勇,杨晓丽,李晓丽,田凯,关慧。基于SR-IOV的高性能网络虚拟化技术。在IEEE高性能计算机体系结构国际研讨会(2010)。

10.Dovrolis, C., Thayer, B., Ramanathan, P. HIP:网络接口的混合中断轮询。ACM SIGOPS操作。系统。启35(2001), 5060。

11.英特尔公司。Intel 64和IA-32架构软件开发者手册, 2014年。

12.英特尔公司。面向定向I/O架构规范的英特尔虚拟化技术,2014。

13.Keller, E., Szefer, J., Rexford, J., Lee, R.B. NoHype:没有虚拟化的虚拟化云基础设施。在计算机体系结构国际研讨会(ISCA)ACM(2010)。

14.Lange, j.r., Pedretti, K., Dinda, P., Bridges, p.g., Bae, C., Soltero, P., Merritt, a .大型超级计算机的最小开销虚拟化。在虚拟执行环境国际会议(VEE)(2011)。

15.Larsen, S., Sarangam, P., Huggahalli, R., Kulkarni, S. TCP/IP网络中端到端延迟的架构崩溃。Int。37 .平行教学, 6(2009), 556571。

16.基于标准的自虚拟化设备评估:基于SR-IOV支持的10个GbE网卡的性能研究。在IEEE国际并行与分布式处理研讨会(2010)。

17.刘杰,黄伟,黄伟斌,熊德明。虚拟机中高性能vmm旁路I/O。在USENIX年度技术会议(2006)。

18.在中断驱动的内核中消除接收活锁。ACM反式。第一版。系统。15(1997), 217252。

19.Raj, H., Schwan, K.通过自虚拟化设备实现高性能和可扩展的I/O虚拟化。在高性能分布式计算机国际研讨会(2007)。

20.Ram, k.k., Santos, j.r., Turner, Y., Cox, a.l., Rixner, S.使用安全透明的网络接口虚拟化实现10Gbps。在虚拟执行环境国际会议(VEE)(2009)。

21.联合或不联合。Int。j .电子。Commun。61, 4(2007), 215225。

22.Salah, K., Qahtan, A.提高Linux下Snort NIDS的吞吐量。在国际信息技术创新会议(IIT)(2008)。

23.萨利姆,j.h.,奥尔森,R.,库兹涅佐夫,A.。在年度Linux展示和会议(2001)。

24.Santos, j.r., Turner, Y., Janakiraman, g.j., Pratt, I.为I/O虚拟化弥合软件和硬件技术之间的差距。在USENIX年度技术会议(2008)。

25.Willmann, P., Shafer, J., Carr, D., Menon, A., Rixner, S., Cox, a.l., Zwaenepoel, W.虚拟机监视器的并发直接网络访问。在IEEE高性能计算机体系结构国际研讨会(2007)。

26.估计中断合并延迟对稳态TCP吞吐量的影响。在软件、电信和计算机网络国际会议(SoftCOM)(2002)。

回到顶部

作者

Nadav阿米特namit@cs.technion.ac.il), Technion,海法,以色列。

亚伯戈登abel@stratoscale.com, Stratoscale,海法,以色列。

Nadav Har 'Elnadav@harel.org.il),克劳迪斯系统公司,荷兹利亚垂体,以色列。

母粒本耶胡达mulix@mulix.org, Stratoscale,海法,以色列。

亚历克斯·兰道landau.alex@gmail.com), Facebook,西雅图,华盛顿州。

艾瑟夫巴德舒斯特尔assaf@cs.technion.ac.il), Technion,海法,以色列。

丹Tsafrirdan@cs.technion.ac.il), Technion,海法,以色列。

回到顶部

脚注

本文的完整版本可在美国计算机学会编程语言体系结构支持学报2012。

作者Gordon, Har'El, Ben-Yehuda和Landau在IBM工作时进行了论文中讨论的研究。

回到顶部

数据

F1图1。中断处理期间退出。

F2图2。ELI中断交付流程。

F3图3。相对于裸机而言,I/O密集型工作负载的性能。

F4图4。使用各种计算i /O比率改进的netperf工作负载的吞吐量改进和基线中断率。

F5图5。使用不同的中断合并间隔(如标签所示)实现Netperf基准测试的吞吐量改进和中断率。

回到顶部

T1表1。Apache基准测试执行崩溃。

T2表2。延迟由Netperf UDP请求-响应基准测试测量。

回到顶部


版权归作者所有。授权给ACM的出版权。

数字图书馆是由计算机协会出版的。版权所有©2016 ACM股份有限公司


没有发现记录

Baidu
map