文档目录

设备虚拟化

设备虚拟化方式主要有三种:设备模拟、半虚拟化设备、设备直通。

设备模拟

设备模拟通过QEMU提供的设备模型,可完全模拟出与物理设备一样的接口。因此,在虚拟机操作系统中,使用原生驱动即可使用设备。设备模拟只能模拟出具有基本功能的设备,不支持复杂功能和模型的设备。完全模拟的设备兼容性好,但由于是纯软件模拟,性能相对较低。

如图 1所示:
图 1. 设备模拟


半虚拟化设备

半虚拟化设备实现前后端驱动。利用虚拟机中的前端驱动,通过基于事务的通信机制,将请求直接发给宿主机端的后端驱动,从而很大程度上减少上下文切换的开销,性能相比完全设备模拟有较大提升。然而,Virtio后端驱动仍在QEMU中实现,在IO处理过程中会经过用户态与内核态之间的多次切换。为进一步提升性能,可将Virtio后端驱动的功能放至内核态实现,称为Vhost-kernel后端,于是数据仅需经过从用户态到内核态的一次切换,就可完成数据传输,实现性能提升。

随着技术发展,将数据放入用户态处理可得到更灵活的形式。因此,在原有Vhost架构中进行改动,增加Vhost-user后端,搭配DPDK、SPDK中相关用户态函数库,性能进一步提升。

如图 2所示:
图 2. 半虚拟化设备


设备直通

设备透传基于硬件的设备虚拟化技术,支持将PCI/PCIe物理设备直接映射到虚拟机的地址空间,在虚拟机中,使用原生设备驱动就可直接使用设备,达到近乎物理设备的性能。物理设备被透传后由虚拟机独享,其它虚拟机无法共享使用该设备。

如图 3所示:
图 3. 设备透传


SR-IOV是由PCI-SIG组织定义的PCIe规范的扩展规范,目的是通过提供一种标准规范,为虚拟机提供独立的内存空间、中断、DMA数据流。 SR-IOV支持单个物理PCIe设备(PF)虚拟出多个虚拟PCIe设备(VF),然后通过设备透传技术将虚拟PCIe设备直通到各虚拟机,以实现单个物理PCIe设备支撑多虚拟机的应用场景。

如图 4所示:
图 4. SR-IOV