您的位置  > 互联网

I/O虚拟化的一个通用要求

通常,VMM 通过以下四种方式支持 I/O 虚拟化:

纯软件仿真。也就是说,VMM 的软件模拟了现有的 I/O 设备,具有良好的兼容性,但纯软件模拟在性能和功能方面表现不佳。它仍然是一个纯软件模拟,但随着新的I/O接口的引入,这些接口针对I/O虚拟化进行了优化,可以解决某些性能问题,但由于需要使用新的操作接口,兼容性问题再次出现。硬件分配,直接将 I/O 设备分配给 VM ( ),这样只有指定的 VM 才能使用 I/O 设备,并且 I/O 设备的驱动程序位于 VM 中,并且 VM 可以直接在 I/O 设备上运行,从而实现性能和兼容性的最佳效果, 但一个 I/O 设备只能由一个 VM 使用。I/O设备共享,是硬件分配方式的延伸,主要要求I/O设备本身支持某些功能,比如能够同时提供多个功能接口,比如PCIe设备的SR-IOV功能,也就是PCIe设备本身可以把一个物理PCIe设备变成多个逻辑设备, 它们共享 PCIe 设备上的物理资源,并且可以独立分配给不同的 VM。

上面I/O虚拟化的一个常见要求是VMM可以安全地隔离属于不同VM的I/O设备,即需要满足以下两个要求:

属于一个VM的vCPU无法访问属于另一个VM的I/O设备,这可以通过VMX( )中的EPT(Page Table)功能来实现,即VMM可以通过软件配置将虚拟机(即Guest)的物理内存映射到不同的主机内存区域,即主机。属于一个 VM 的 I/O 设备无法访问属于其他 VM 的内存,也无法向属于其他 VM 的中断控制器发送中断。在纯软件模拟的情况下,VMM 还可以控制 I/O 设备访问内存(如 DMA)并以纯软件方式发送中断的行为。但是,如果使用硬件分配,则需要拦截 I/O 设备对内存的访问并在硬件上发送中断,然后重定向到指定的 VM,这就是 VT-d 派上用场的地方。

VT-d 是位于 CPU、内存和 I/O 设备之间的硬件设备,通常位于 PCI 设备树的根目录,或类似位于 I/O 子系统的根目录。O 页表(类似于分页机制),用于重新定位中断的 LAPIC 或 I/O 设备访问的目标 LAPIC 或 I/O 设备的物理内存地址。如下图所示:

VMM 软件负责 I/O 设备的分配,即指定的 I/O 设备和对应的 VM 对应,并负责建立中断重定向关系表和 I/O 地址转换页表,并将这些转换关系的配置设置到 VT-d 硬件设备, 而I/O设备发起的中断请求或DMA内存访问请求具有对应设备的ID,使VT-d硬件单元可以组合不同的I/O设备中断,并将内存访问请求重定向到相应的虚拟机,从而达到隔离不同虚拟机的I/O设备的目的。

通常,VT-d 的主要功能是将 DMA 访问请求和中断请求从 I/O 设备重定向到 VMM 配置的 VMM。

欢迎关注同名微信公众号“河马虚拟化”,第一时间获取最新文章。