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内存管理都是在虚拟机管理器控制下的。