web-dev-qa-db-ja.com

LinuxでKVMデバイスパススルーを有効にするにはどうすればよいですか?

MSI-Gd65ゲーム用マザーボードとIntel i7 4790を使用しています。BIOSのCPU機能セクションでVT-Dが有効になっています。

Ubuntu 14.04.1 LTSを実行していますが、デバイスを切り離そうとすると、次のメッセージが表示されます。

#virsh nodedev-detach pci_0000_00_1f_2

エラー:デバイスpci_0000_00_1f_2の切り離しに失敗しましたエラー:サポートされていない操作:VFIOもKVMこのシステムでは、デバイス割り当ては現在サポートされていません

DmesgにはIOMMUに関するいくつかの情報が含まれていますが、これがVT-Dが有効になっていることを意味するかどうかはわかりません

$ dmesg | grep -i iommu

[0.027450] dmar:IOMMU 0:reg_base_addr fed90000 ver 1:0 cap c0000020660462 ecap f0101a
[0.027455] dmar:IOMMU 1:reg_base_addr fed91000 ver 1:0 cap d2008020660462 ecap f010da
[0.027521] DRHDベース0xfed91000 IOMMU 1の下のIOAPIC id 8

このシステムでVT-Dを有効にし、PCIデバイスをKVMゲストにパススルーしてください。

13

この問題の解決策は、GRUBブートパラメーターでIOMMUを有効にすることです。

これは、/ etc/default/grubで次のように設定することで実行できます。

GRUB_CMDLINE_LINUX_DEFAULT = "intel_iommu = on"

AMDプロセッサを使用している場合は、代わりにAMD_iommu=onをブートパラメータに追加する必要があります

GRUB_CMDLINE_LINUX_DEFAULT = "静かなスプラッシュAMD_iommu = on"

次にupdate-grubを実行して再起動します

このリンクは私にかなり役立ちました: https://www.centos.org/forums/viewtopic.php?f=47&t=48115

参照: https://pve.proxmox.com/wiki/Pci_passthrough

IommuはVT-Dに代わるAMDの代替品であると私は信じていたので、これは私を多少回避しました。

11

Anonymouslemmingの回答に追加:Ubuntu(18.04の場合)にはバグがあるようです。これにより、/ etc/default/grubのGRUB_CMDLINE_LINUX_DEFAULTの設定が無視されます。

/etc/default/grub.d/50-curtin-settings.cfgのGRUB_CMDLINE_LINUX_DEFAULTをコメント化することで修正できます

https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1569567

5
Mads Y

別のモジュールが使用しているため、ハードウェア要件があるようです(IOAPIC)。この場合は、ソフトウェア側をセットアップするだけです。

適切なデバイスの取り外しをサポートするには、すべての前提条件がインストールされていることを確認する必要があるようです。それらがインストールされていないか、セットアップされていないようです。

このような場合に使用する前に、適切なライブラリとカーネルモジュールをインストールして初期化する必要があります。これらは、KVMセットアップ用のさまざまな「ホスト」システムユーティリティとカーネルモジュールです。

ユーティリティを単に実行する前に、適切なKVMソリューションを適切にセットアップする方法についてのマニュアルのセクションを読み、これらの手順に従う必要があります。必要なパッケージがインストールされているという理由だけで最初に起動します。

問題のデバイスがマザーボードに組み込まれている場合、技術的にはPCIデバイスではなく、PCIにマップされたデバイスである可能性があることに注意してください。これらのデバイスは実際には他の方法で接続されていますが、BIOSを使用してPCI BIOSスペースにマップされます。これらは、システムへの接続方法のさまざまな側面に応じて、デバイスの取り外しと互換性がある場合とない場合があります。

さらに、ドライバーが相互に依存している場合、親デバイスを切り離さずにサブデバイスを切り離すことができない場合があります。親デバイスがPCIコントローラー、PCIブリッジ、またはその他のサポートされているバスコントローラーまたはブリッジである絶対的な確実性があるデバイスのみを切り離すことができます

私はcentos7にいます

ここで私を導くこのエラーがありましたが、私の問題は、(私の場合)vim /etc/sysconfig/grubを更新し、intel_iommu=onGRUB_CMDLINE_LINUXの行末に追加することではありませんでした

このコマンドを実行する必要がありました

grub2-mkconfig -o /boot/grub2/grub.cfg

その後、再起動します

注:ただし、上記のコマンドの前に再起動を指定してgrub2-mkconfigを実行したため、表示された内容からは何も実行されませんでした。

参照: https://bugzilla.redhat.com/show_bug.cgi?id=1269446

コメント11と12

0
gstlouis