PCI-STUB 与 VFIO-PCI

PCI-STUB 与 VFIO-PCI

我想问一下,使用VFIO-PCI相对于PCI-STUB有什么优势?

我找到了这篇文章“通过 OVMF 的 PCI 直通”,但他们并没有说出所有优点,只是说 VFIO 有一些好处。

谢谢

答案1

PCI-STUB 是一个虚拟驱动程序。最初开发它是因为原始的 KVM 设备分配实际上并没有作为主机驱动程序绑定到分配的设备,它只是抓取设备并开始使用它。由于 KVM 不是正确的设备驱动程序,因此当 KVM 将设备分配给用户时,另一个主机驱动程序可能会尝试绑定到该设备。引入pci-stub驱动程序来占用设备的驱动程序插槽,而KVM则使用它。

与 pci-stub 不同,vfio 是用户空间驱动程序的完整接口。它提供对设备的安全、隔离和 IOMMU 保护的访问。

vfio的优点:

  1. pci-stub 通常内置于内核中,这使得它能够比可加载模块的驱动程序更早地绑定到设备。通过此设置,我们可以指示 pci-stub 在主机驱动程序访问设备之前绑定到设备,以便我们可以将设备保持在原始状态以分配给来宾。

  2. vfio 的另一个较小用例是 IOMMU 分组。如果您有一个包含多个设备的组,则该组中的所有设备都必须绑定到兼容的驱动程序,否则 vfio 将认为该组不可行。这是为了防止主机驱动程序与用户控制的设备位于同一组中,因为它们不会彼此隔离。对于 pci-stub,我们知道该驱动程序不会代表主机启动任何 DMA,因此我们认为它是兼容的。

    因此,如果您的 IOMMU 组中有端点,您需要对其执行某些操作以使该组可行,但您希望确保用户无权访问它,则可以将设备绑定到 pci-stub。与将设备绑定到 vfio-pci 相比,这增加了一点额外的保护,因为受感染的用户无法简单地打开组内通过 vfio 接口绑定到 vfio-pci 的其他设备。

答案2

正如 Ehtesham 所回答的,pci-stub 是一个虚拟驱动程序,用于防止加载 nouvaeu、nvidia、radeon、amdgpu 等设备驱动程序,以便您的设备的 BIOS 不会被驱动程序初始化并可以传递到 KVM。

我想补充一点,有一个配置选项,您只需放置一个conf文件,您可以在其中列出要在vfio-pci之后加载的其他模块,确保vfio-pci在设备驱动程序之前加载。

例如,在 Ubuntu 18.04 中,您在 /etc/modprobe.d/ 中创建 vfio-pci.conf,内容如下:

#options vfio-pci ids=vendid:devid,vendid:devid2,...
softdep radeon pre: vfio-pci
softdep amdgpu pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
#softdep nouveau pre: vfio-pci
#softdep drm pre: vfio-pci
#softdep nvidia pre: vfio-pci
#softdep xhci_hdc pre: vfio-pci

如果您将 vfio-pci id 列表添加到 grub,则不需要第一行。

相关内容