PCI-STUBおよびVFIO-PCI

PCI-STUBおよびVFIO-PCI

PCI-STUBと比較してVFIO-PCIを使用すると、どのような利点があるかを尋ねたいと思います。

この記事を見つけました」OVMFによるPCIパススルー「しかし、彼らはすべての利点に言及しているわけではありませんが、VFIOにはいくつかの利点があるだけです。

ありがとう

答え1

PCI-STUBは仮想ドライバです。これは、ネイティブKVMデバイスの割り当てがホストドライバとして割り当てられたデバイスに実際にバインドされておらず、単にデバイスをキャッチして使用し始めるため、元々開発されました。 KVMが正しいデバイスドライバではないため、KVMがユーザーにデバイスを割り当てると、他のホストドライバがデバイスにバインドしようとする可能性があります。 pci-stubドライバはデバイスのドライバスロットを占めるために導入され、KVMはそれを使用します。

pci-stubとは異なり、vfioはユーザー空間ドライバへの完全なインターフェイスです。これは、デバイスへの安全で隔離されたIOMMU保護アクセスを提供します。

vfioの利点:

  1. pci-stubは通常カーネルに組み込まれており、ロード可能モジュールのドライバの前にデバイスにバインドできます。この設定では、ホストドライバがデバイスにアクセスする前にデバイスにバインドするようにpci-stubに指示し、ゲストに割り当てることができるようにデバイスを元の状態に保つことができます。

  2. vfioのもう1つの小規模ユースケースはIOMMUのグループ化です。複数のデバイスを含むグループがある場合は、グループ内のすべてのデバイスを互換性のあるドライバにバインドする必要があります。それ以外の場合、vfioはグループを実行できないと見なします。これは、ホストドライバが互いに分離されていないため、ユーザーコントロールデバイスと同じグループにあることを防ぐためです。 pci-stubの場合、ドライバがホストに代わってDMAを起動しないことがわかっているので、互換性があるとします。

    したがって、IOMMUグループにグループを実行可能にするために何かを行う必要があるエンドポイントがありますが、ユーザーがそのグループにアクセスできないようにしたい場合は、デバイスをpci-stubにバインドできます。感染したユーザーはvfioインターフェイスを介してvfio-pciにバインドされているグループ内の他のデバイスを開くことができないため、デバイスをvfio-pciにバインドするのに比べていくつかの追加の保護が追加されます。

答え2

Ehteshamの答えによると、pci-stubは、nouvaeu、nvidia、radeon、amdgpuなどのデバイスドライバがロードされるのを防ぎ、デバイスのBIOSがドライバによって初期化されずにKVMに渡されるようにするためのダミードライバです。

vfio-pciの後にロードする他のモジュールをリストしたconfファイルを入れて、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 に追加すると、最初の行は必要ありません。

関連情報