【IT168 技术应用】本文简要介绍了Intel VT、它所形成的虚拟化软件生态系统以及提供给处理器和I/O虚拟化的硬件支持。
Intel虚拟化技术简介
Intel VT包括了支持基于Intel处理器平台虚拟化的技术因素,因此实现了多个操作系统和应用在独立分区中的运行。每个分区就像是一个虚拟机,提供了各分区之间的分离和保护。这种基于硬件的虚拟化解决方案再加上虚拟化软件,实现了例如服务器整合、活动分区、工作负载隔离、嵌入式管理、传统软件迁移和灾难恢复等多种用途。
虚拟机管理器与虚拟机
Intel VT支持由两个主要类别的软件所组成的虚拟机架构:
-虚拟机管理器(Virtual-Machine Monitor,VMM):虚拟机管理器就像是一个主机,全面控制着处理器和其他平台硬件。虚拟机管理器体现为客户软件和一个虚拟处理器,允许直接在逻辑处理器上执行。虚拟机管理器能够保留对处理器资源、物理内存、中断管理和I/O的选择性控制。
-客户软件:每个虚拟机就是一个客户软件环境,支持由一个操作系统和应用软件组成的栈。每个虚拟机独立于其他虚拟机运行,对物理平台所提供的处理器、内存、存储、线卡和I/O使用相同的界面。这个软件栈就好像运行在一个没有虚拟机管理器的平台上。运行在虚拟机中的软件必须以降低的权限运行,这样虚拟机管理器就可以保留对平台资源的控制权。
在虚拟化的使用中,虚拟机管理器是平台基础架构的一个关键组成部分。Intel VT可以通过编程界面虚拟化处理器硬件来提高虚拟化基础架构软件的可靠性和可支持性。另外它还为平台中其他硬件组件的额外虚拟化支持奠定了基础。
处理器虚拟化的硬件支持
对处理器虚拟化的硬件支持可以获得一个简单、强大且可靠的虚拟机管理软件。虚拟机管理软件依赖于操作细节的硬件支持来处理事件、预期和分配给虚拟机的资源。
Intel VT提供了对处理器虚拟化的硬件支持。对于Intel 64处理器来说,这其中包括一系列虚拟机扩展(VMX),通过使用虚拟机支持对于多个软件环境的处理器硬件虚拟化。另外还有一个针对Intel安腾架构的处理器虚拟化所定义的对应架构。
I/O虚拟化
一个虚拟机管理器必须支持来自客户软件的I/O请求虚拟化。虚拟管理器也可能通过以下任何一种方式支持I/O虚拟化:
-仿真:虚拟机管理器可以通过模拟一个现有(传统)I/O设备将虚拟机呈现到客户软件。虚拟机管理器在软件中仿真I/O设备的功能特性,不管通过哪个物理设备,最终呈现在物理平台上。I/O虚拟化通过仿真提供了良好的兼容性(通过允许现有设备驱动程序运行在客户机中),但是也造成了其性能和功能方面的限制。
-新的软件接口:这种模式类似于I/O仿真,但仿真的不是传统设备,虚拟机管理器为客户软件提供了一个综合设备接口。这个综合设备接口被定义成虚拟化友好的,相比I/O仿真相关的开销来说,这种途径可以实现有效的虚拟化,它提供了比仿真更高的性能,但是兼容性有所降低(因为需要专门的客户软件和用于新软件接口的驱动程序)。
- I/O分配:一个虚拟机管理器可以直接将物理I/O设备分配给虚拟机。在这种模式下,被分配设备的驱动程序运行在分配给的虚拟机上,并且可以直接与设备应用进行通信,只需要极少甚至不需要虚拟机管理器的参与。强健的I/O分配要求额外的硬件支持,以确保被分配设备的访问是隔离的,且限制于分配分区所拥有的资源。I/O分配模式还可以被用于创建一个或者多个I/O分区,支持仿真或者对来自其他客户的I/O请求进行虚拟化的软件接口。这种基于I/O池的方法不需要运行物理设备驱动程序作为虚拟机管理器的专有软件。
- I/O设备共享:这种模式是对I/O分配模式的一个扩展,在这种模式下,I/O设备支持多个功能接口,每个都可以独立分配到一个虚拟机中。设备硬件本身能够通过这些功能接口接收多个I/O请求,经过处理并利用设备的硬件资源。虚拟机管理器根据使用要求,可以支持任何上述模式的I/O虚拟化。例如,I/O可以最适合于传统设备的虚拟化。当把I/O密集型工作负载托管到一个客户端的时候,I/O分配也许可以提供非常好的的性能。
新软件接口的使用可以在兼容性和性能之间取得一个折衷,设备I/O的共享在平台中提供了超出物理设备数量的更多虚拟设备。
Intel VT for Directed I/O概览
上述所有I/O虚拟化模式都有一个共同的要求,那就是能够将设备访问隔离和限制到由分区管理设备所拥有的资源范围内。Intel VT for Directed I/O为虚拟机管理器软件提供了下面几项功能:
• I/O设备分配:用于灵活分配I/O设备到虚拟机,并针对I/O操作扩展和隔离虚拟机的特性
• DMA重映射:支持对设备Direct Memory Accesses (DMA)的独立地址转译
• 中断重映射:用于将分离中断请求并将其路由到合适的虚拟机上
• 可靠性:用于记录和报告给系统软件可能损坏内存或者影响虚拟机分离的DMA和中断错误。
DMA重映射的硬件支持
为了普及I/O虚拟化,使其适用于不同处理器架构和操作系统,本文将“域”定义为一个平台中的抽象分离环境,主机物理内存的子集分配到其中。
DMA重映射提供了分离设备访问到内存的硬件支持,让系统中的每个设备都可以通过一个独特的I/O页表格集分配到特定的域中。当设备要访问系统内存的时候,DMA重映射硬件会截取这个访问请求,利用I/O页表格来决定是否允许这次访问;它还决定了访问的实际位置。频繁使用的I/O页表格结构被缓存在硬件中。DMA重映射可以针对每个设备独立配置,或者在多个设备之间共同配置。
操作系统使用DMA重映射
操作系统利用DMA重映射有以下几种途径:
• 操作系统保护:操作系统可以定义一个包括其关键代码和数据结构的域,并将来自系统中所有I/O设备的访问限制在这个域中。这让操作系统可以限制错误或者非故意的数据代码损坏,从而提高操作系统的强健性和可靠信。
• 功能支持:操作系统会利用域来更好地管理来自传统设备到高内存的DMA(例如,32位PCI设备访问内存在4GB以上)。这是通过编程I/O页表格来重新将来自这些设备的DMA映射到高内存。如果没有这一支持的话,软件必须通过操作系统“回弹缓冲”进行数据拷贝。
• DMA隔离:操作系统通过创建多个域、给每个域分配一个或者多个I/O设备来管理I/O。每个设备驱动程序明确地注册操作系统I/O缓冲器,操作系统将这些I/O缓冲器分配给特定的域,利用硬件来强制实施DMA域保护。见下表。
操作系统使用DMA重映射实例
虚拟管理器使用DMA重映射
I/O虚拟化的纯软件方法的局限性可以通过直接将I/O设备分配到分区来进一步完善。通过折衷方法,被分配I/O设备的驱动程序只运行在它所分配到的分区内,并且可以与设备硬件进行直接通信,只需要极少甚至不需要虚拟机管理器的参与。DMA重映射的硬件支持可以实现这种直接的设备分配,而无需对虚拟机管理器的专门设备知识。见下表。
DMA重映射的虚拟化使用实例
在这种模式下,虚拟机管理器限制本身能够直接分配设备到他们的分区。虚拟机管理器只有当客户软件访问那些影响系统功能和分离的被保护资源(例如配置访问、中断管理等)时才被调用,而不是在接收到来自一个分区的所有I/O请求时才调用。
为了支持I/O设备的直接分配,虚拟机管理器必须强制分离DMA请求。I/O设备可以被分配到域中,DMA重映射硬件可被用于将来自I/O设备的DMA限制在这个域所拥有的物理内存。对于被重新定位在物理内存中的域来说,DMA重映射硬件可以通过编程来执行必要的转译。
I/O设备分配还允许其他I/O共享用途——例如,分配一个I/O设备到一个为其他用户分区提供I/O服务的I/O分区。DMA重映射硬件能够让虚拟化软件选择适合于I/O虚拟化的设备分配与软件方法的理想结合。
客户端的DMA重映射用途
运行在虚拟机中的客户操作系统可以借助DMA重映射硬件来支持上面提到的DMA重映射操作系统用途。为了支持这个用途,虚拟机管理器可以将DMA重映射硬件虚拟化到客户端。例如,虚拟机管理器可以截取到虚拟机DMA重映射硬件寄存器的客户访问请求,管理提供给物理DMA重映射硬件的客户DMA重映射架构阴影拷贝。在客户I/O页表升级方面,客户软件可执行适当的虚拟失效操作。虚拟机管理器可以截取虚拟失效请求,升级各自的阴影页表,并使重映射硬件失效。由于故障DMA交易是不可重启的(与CPU内存管理虚拟化不同),虚拟机管理器无法对它的阴影DMA重映射结构进行缓慢升级。为了保持阴影结构与客户结构的一致性,虚拟机管理器可能会暴露重映射硬件的预取行为或者使用处理器内存管理机制来写保护客户DMA重映射结构。
与处理器虚拟化的相互作用
下图描述了系统软件如何与处理器级虚拟化以及Intel® VT for Directed I/O的硬件支持相互作用的。
I/O和处理器虚拟化之间的相互作用
虚拟机管理器通过处理器的内存管理硬件管理处理器对访问物理内存的请求。DMA请求访问物理内存使用DMA重映射硬件。处理器内存管理和DMA内存管理都是在虚拟机管理器控制下的。
中断重映射的硬件支持
中断重映射为重映射和路由中断来自I/O设备(直接或者通过I/O中断控制器生成)的请求提供了硬件支持。通过重映射间接实现可以分离不同分区之间的中断请求。中断重映射硬件有以下几种用途。
中断分离
在英特尔架构平台上,中断请求是通过Root-Complex来识别的,因为写入交易是以架构地址区间(0xFEEx_xxxxh)为目标。中断请求是自描述的(例如,中断请求的特征被编码到请求地址和数据中),让任何DMA发起者能够生成带有任意特征的中断信息。
虚拟机管理器可以利用中断重映射来加强域之间对外部中断请求的隔离。例如,虚拟机管理器可以利用中断重映射硬件来将中断请求域特定设备区分开来,并将其路由到设备被分配到的虚拟机中。虚拟机管理器还可以利用中断重映射硬件力控制这些中断请求的属性(例如目标CPU、中断向量和交付模式等)。
虚拟机管理器的另一个使用实例就是利用中断重映射硬件将外部中断从虚拟机管理器所拥有的中间处理器中断(IPI)解除。软件可以强制实施这一操作,确保重新映射的外部中断具有匹配虚拟机IPI特性的属性(例如向量数)。
中断迁移
当一个中断请求的目标从一个逻辑处理器迁移到另一个逻辑处理器的时候,中断重映射架构可用于支持中断请求的动态重定向。如果没有中断重映射的硬件支持,那么中断请求的重新均衡需要软件来重新编程中断源。然而,这些资源的重新编程是非原子的(要求多个寄存器重新编程),这通常是很复杂的(可能需要暂时屏蔽中断源),并且取决于中断源的特征(例如对于某些中断源来说没有屏蔽功能;当屏蔽了某些源之后,周边中断请求可能会丢失等)。
中断重映射让软件能够有效地对中断进行重新定向,无需在来源处重新编程中断配置。操作系统软件可以使用中断迁移在处理器之间均衡负载(例如当运行I/O密集工作负载的时候),或者通过虚拟机管理器在物理处理器之间迁移分区的虚拟CPU来提高CPU利用率。
x2APIC支持
Intel 64 x2APIC架构将APIC可寻址性从8位扩展到32位。中断重映射让x2APIC能够支持针对外部中断请求的扩展的APIC可寻址性,无需对中断来源进行硬件变更(例如I/OxAPIC和MSI/MSIX设备)。