1,QEMU/KVM的PCIe设备直通
SR-IOV 支持单个物理PCIe设备虚拟出多个虚拟PCIe设备,然后将虚拟PCIe设备直通到各虚拟机,以实现单个物理PCIe设备支撑多虚拟机的应用场景,SR-IOV 的 PCIe 设备直通将控制面与数据面都写卸载到了硬件上执行,通过 VFIO(vfio-pci 是 linux 内核对 IOMMU 和 PCI 底层逻辑的抽象封装 API,支持 PCIe 设备直通时以 vfio-pci 作为 PCIe 设备驱动挂载到 PCI 总线, 将 PCIe 设备 io 配置空间 BAR、中断暴露到用户空间 QEMU,QEMU 来配置虚拟设备的 IO 映射关系,从而允许虚拟机内核驱动直接访问硬件资源,以达到较高的 IO 效率) 把设备直通给 VM,VM 中运行的驱动是真实设备的驱动。比如直通的是网卡的话,运行的就是真实的网卡驱动,因此存在一个问题:不同型号网卡的宿主机上使用的驱动可能是不同的,因为会有热迁移问题(只能将VM迁移到具有完全相同配置的宿主机上)。物理 PCIe 设备通过直通的方式进入到虚拟机的客户机时,客户机设备驱动使用透传设备的 DMA 访问虚拟机内存物理地址时,IOMMU 会进行 GPA->HPA的转换。
设备直通并不是真的把物理设备直通给VM了,其实VM 看到的设备还是 qemu 模拟的。设备直通主要是把 device driver 和物理设备之间性能相关的 dat