HACK#33 使用IOMMU提高客户端操作系统运行速度

本节介绍IOMMU功能,并说明如何提高客户端操作系统运行速度。

虚拟环境下客户端操作系统的I/O方式

本节将介绍在虚拟化环境下客户端I/O是通过什么样的方式进行的。Xen或KVM等管理程序中主要使用的有下列三种方式。

1.仿真方式(见图5-18)

2.半虚拟化方式(见图5-19)

3.直接I/O方式(见图5-20)

HACK#33 使用IOMMU提高客户端操作系统运行速度 - 图1

图 5-18 仿真方式

仿真方式是指使用仿真的PCI设备的I/O方式。从客户端操作系统看起来仿真设备与一般设备是同样的。Xen或KVM在I/O仿真中采用的是qemu,因此可以通过qemu仿真的设备都可以使用。使用这个方式时,客户端操作系统完全不需要考虑虚拟化,因此已有的设备驱动程序也可以直接使用,是这种方式的优点之一。但是进行I/O时必须进行下列仿真。仿真在I/O寄存器层进行,因此针对客户端操作系统的一次I/O请求需要进行多次的仿真,就会造成系统额外开销过大,I/O速度缓慢。

1.客户端操作系统发布I/O命令。

2.管理程序进行捕捉(trap)。

3.管理程序分析客户端操作系统发布的命令。

4.如果是I/O命令,则通知主机操作系统上的I/O仿真器。

HACK#33 使用IOMMU提高客户端操作系统运行速度 - 图2

图 5-19 半虚拟化方式

HACK#33 使用IOMMU提高客户端操作系统运行速度 - 图3

图 5-20 直接I/O方式

5.I/O仿真器仿真I/O命令。

6.如果需要实际的I/O发布,则I/O仿真器作为主机操作系统上的应用程序发布系统调用,实施I/O。

7.I/O仿真器一旦完成I/O,就会进行设置中断位(interrupt bit)、存取数据等的仿真。

8.通知管理程序I/O完成。

9.管理程序将中断提交给客户端操作系统。

半虚拟化方式是指使用称为Para Virtual驱动程序(PV驱动程序)或Split驱动程序的方式。PV驱动程序是指利用客户端操作系统使用的前端驱动程序和主机操作系统使用的后端驱动程序进行客户端I/O的方式。这个方式需要根据磁盘或网络、控制台等的I/O种类来生成驱动程序,但是可以非常快速地进行I/O处理。使用这种方式,可以减少客户端操作系统发出每一次I/O请求时必须进行的处理数量,从而提高I/O速度。但是,实际发出I/O请求的是主机操作系统或管理程序,因此这部分系统开销是仍然存在的。在这种情况下,就出现了能够将这部分系统开销也消除的硬件。这就是Intel公司的Virtualization Technology for Directed I/O(VT-d)和AMD公司的AMD IOMMU。Xen或KVM中安装了称为PCI设备的直接I/O方式,就是运用这些硬件的。后面将介绍什么是直接I/O方式,以及如何使用。