PCIパススルーを介してゲストオペレーティングシステムで自分のデバイスを使用できないのはなぜですか?

PCIパススルーを介してゲストオペレーティングシステムで自分のデバイスを使用できないのはなぜですか?

PCIパススルーを試してみたいです。古いキャプチャビデオカードをWindows XPクライアントに渡しました。

IOMMU有効
vfio_pci

次のコマンドを実行します。

virsh nodedev-detach pci_0000_05_05_0

lspci -s 00:05 -v

PCIデバイスが「実行中」であると報告しますvfioが、PCIデバイスでXPを起動すると、次のエラーが返されます。

Please ensure all devices within the iommu_group are bound to their vfio bus driver.

私は何が間違っていましたか?

答え1

解決策が見つかりました。まず、IOMMUグループを識別する必要があります。私の場合は11です。 (lspci私の場合は、pciアドレスを使用して読み取ることがわかりました。)

find /sys/kernel/iommu_groups/ -type l|grep \/11
/sys/kernel/iommu_groups/11/devices/0000:00:14.4
/sys/kernel/iommu_groups/11/devices/0000:05:06.0
/sys/kernel/iommu_groups/11/devices/0000:05:05.0

qemuしたがって、withに05:05と05:06(グループ内の2つのPCIカード)を追加する必要がありますlibvirt。 virt-managerでは、ハードウェアを追加してPCIホストを選択するのは簡単です。今すぐ起動します...別のエラーが表示されますdmesg

"Flags mismatch irq 21. 00000000 (vfio-intx(0000:05:05.0)) vs. 0000000....usb...."

これは、システムが割り込みを共有できないため、ホストからデバイスを削除する必要があることを意味します。

したがって、我々は割り込みを見つける必要があります:

cat /proc/interrupts | grep 21

たとえば、usb2を返すので、usbディレクトリを検索します。

find  /sys/devices/pci0000\:00/0000\:00\:* -iname usb2

、USBディレクトリに移動します。私の場合は13.2です。

cd /sys/devices/pci0000\:00/0000\:00\:13.2/

ホストから削除されました(sic!)。

echo -n 1 > remove

ゲストが起動すると、PCI カードがゲストに割り当てられます。

再び私たちに戻ろうとしている?解決策を見つけたら、答えを追加します!

関連情報