Linux 虚拟化和 PCI 透传技术(3)

设备模拟背后的秘密

早期的设备模拟类型在管理程序中实现影子(shadow)形式的设备接口,以便为客户操作系统提供一个到硬件的虚拟接口。这个虚拟接口包含预期的接口,包括表示设备(如 shadow PCI)的虚拟地址空间和虚拟中断。但是,由于有一个设备驱动程序与虚拟接口通信,且有一个管理程序为实际硬件转换这种通信,因此开销非常大 — 特别是在诸如网络适配器之类的高带宽设备中。

Xen 使 PV 方法(上一小节介绍过)得以流行,PV 方法通过使客户操作系统驱动程序意识到它正在被虚拟化来减少性能降低幅度。在本例中,客户操作系统将不会看到一个设备(比如网络适配器)的 PCI 空间,而是一个提供高级抽象(比如包接口)的网络适配器应用程序编程接口(API)。这种方法的缺点是客户操作系统必须针对 PV 进行修改,优点是在某些情况下您可以得到近乎本机的性能。

在设备透传技术早期发展过程中,开发人员使用一个瘦模拟模型,在该模型中,管理程序提供基于软件的内存管理(将客户操作系统地址空间转换为可信主机地址空间)。尽管开发人员在早期提供了隔离一个设备和一个客户操作系统的方法,但那种方法缺乏大型虚拟化环境需要的性能和伸缩性。幸运的是,处理器供应商已经为下一代处理器装备了一些指令,以支持管理程序和用于设备透传的逻辑,包括终端虚拟化和直接内存访问(DMA)支持。因此,新的处理器提供 DMA 地址转换和权限检查以实现有效的设备透传,而不是捕获并模拟对管理程序下的物理设备的访问。

设备透传的硬件支持

Intel 和 AMD 都在它们的新一代处理器架构中提供对设备透传的支持(以及辅助管理程序的新指令)。Intel 将这种支持称为 Virtualization Technology for Directed I/O (VT-d),而 AMD 称之为 I/O Memory Management Unit (IOMMU)。不管是哪种情况,新的 CPU 都提供将 PCI 物理地址映射到客户虚拟系统的方法。当这种映射发生时,硬件将负责访问(和保护),客户操作系统在使用该设备时,就仿佛它不是一个虚拟系统一样。除了将客户机映射到物理内存外,新的架构还提供隔离机制,以便预先阻止其他客户机(或管理程序)访问该内存。Intel 和 AMD CPU 提供更多虚拟化功能。

另一种帮助将中断缩放为大量 VM 的技术革新称为 Message Signaled Interrupts (MSI)。MSI 将中断转换为更容易虚拟化的消息(缩放为数千个独立中断),而不是依赖将被关联到一个客户机的物理中断 pin。从 PCI 2.2 开始,MSI 就已经可用,但 PCI Express (PCIe) 也提供 MSI,在 PCIe 中,MSI 支持将结构缩放为多个设备。MSI 是理想的 I/O 虚拟化技术,因为它支持多个中断源的隔离(而不是必须通过软件多路传输或路由的物理 pin)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjsjg.html