グラフィックパススルーのためにカーネルでIOMMUを有効にする

グラフィックパススルーのためにカーネルでIOMMUを有効にする

短い質問:

intel_iommuLinuxカーネルで設定を開く方法は?私はgrub2ブートローダを使ってDebianホストを実行しています。私が見た文書にはeditと書かれていますが/boot/grub/menu.lst、そのファイルがないので、これはgrub 1.xにのみ関連しているようです。

私が理解したように(そして私が考えることができる最後のオプション)、このブートオプションを変更すると、次のエラーメッセージが削除されることがあります。/var/log/kern.log

vboxpci: No IOMMU domain (attach)

長い質問:

ゲストオペレーティングシステムがグラフィックカードに直接アクセスできるようにする

私は最近、Virtualboxで実行されているゲストオペレーティングシステムにPCI-expressデバイスを配信できることに気づきました。かっこいい! 2つのNVIDIA Quadro FXカード(SLIブリッジが取り付けられているため問題がないことを願っています)があり、PhotoshopなどでOpenGL機能を使用できるように、2番目のカードをゲストOS専用に使用したいと思います。

NVIDIA市場はこれ」SLIマルチオペレーティングシステム「設定は基本的に私が長年設定したかったのですが、何年もVirtualBoxをとても楽しく使ってきたので、仮想化ソフトウェア(Parallels Workstation Extreme)にあまりお金を使いたくなかったのです。

ホストシステム

私はかなり高度なワークステーションデバイス(Intel ICH10RチップセットとXeon W3680 CPUを搭載したAsus P6T7 WSスーパーコンピュータmobo)のDebianリポジトリでlinux-3.5.0-19を実行しており、カーネルでIOMMUサポートを有効にしたいと思います。直接コンパイルしないことをお勧めします。

バイオス

BIOS設定でVT-xとVT-dのサポートを有効にしました。しかし、IOMMUへの具体的な言及は見えません。

PCIデバイスの接続

とても簡単です! VirtualBoxの公式文書は次のとおりです。ここ。私がしたことは(あまり曖昧であることがわかりました)を開き、セカンダリnvidia-settingsグラフィックカードを選択し、バスID(私の場合は「PCI:5:0:0」)を記録しておくことでした。次に、ホストのコマンドラインで次の操作を行います。

VBoxManage modifyvm "Windows Guest" --pciattach 05:00.0

(最初にこのプログラムを実行したときにVirtualBoxがPIIXチップセットをエミュレートしたため、エラーが発生しました。PCIパススルーはICH9チップセットでのみ機能すると言われました。VirtualBox VMシステム設定でチップセットをICH9に変更してゲストを開いてインストールしました。必要な新しいドライバを再起動した後、すべてがうまくいったので、ゲストをシャットダウンしてコマンドを再実行しました。

出力がなく、ほとんどすぐにコマンドラインに戻ります。

ゲストでホストGPUを使用する

ゲストをオンにする前にカーネルで文書化されていないことが必要な場合に備えて、まずvirtualbox-dkmsを介してホストを再起動しました。権限なしで前のコマンドを実行したため、sudo変更があると思われます。

次にゲストを起動すると、Windows Updateがタスクを開始し、正しいNVIDIAドライバを自動的に検出してインストールします。これまではすべてがよさそうです。ただし、デバイスを使用するにはゲストを再起動する必要があります...

質問

グラフィックカードドライバがクライアントシステムにインストールされ、PCIデバイスが接続されているため、Windowsデスクトップにアクセスできません。 Windowsのログイン画面に移動した後、ログインすると画面が停止し、「ようこそ」というメッセージとともに「回転しますが回転しません」という青い丸が横に表示されます。

/var/log/kern.log印刷された最後のメッセージは次のとおりです。

vboxpci: vboxPciOsDevInit: dev=500
vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061bea0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
device eth0 entered promiscuous mode
power state: 0
vboxpci: No IOMMU domain (attach)

この問題を解決する方法を知っていますか?

修正する:

これでカーネルを起動しましたが、intel_iommu=onまだ完全には機能しません。ホストを再起動した後、ゲストが起動し、正常にログインし、すべてが起動前と同じように見えます。 2番目のグラフィックカードは何も出力しません。

Device Manager では、Quadro FX デバイスの横に感嘆符があり、Device プロパティに「このデバイスは十分な空きリソースが見つかりませんでした」というメッセージとともにエラー コード 12 が表示されます。追加の説明マイクロソフト技術ネットワーク

ホストカーネルログでは有望に見えます。

vboxpci: detected device: 10de:05ff at 05:00.0, driver pci-stub
vboxpci: vboxPciOsDevInit: dev=500 pdev=ffff88061baa0000
pci-stub 0000:05:00.0: irq 76 for MSI/MSI-X
vboxpci: enabled MSI
500: linux vboxPciOsDevGetRegionInfo: reg=0
got mmio region: fa000000:16777216
500: linux vboxPciOsDevGetRegionInfo: reg=1
got mmio region: d0000000:268435456
500: linux vboxPciOsDevGetRegionInfo: reg=3
got mmio region: f8000000:33554432
500: linux vboxPciOsDevGetRegionInfo: reg=5
got pio region: 8c00:128
500: linux vboxPciOsDevGetRegionInfo: reg=6
got mmio region: fb980000:524288
got PCI IRQ: 76
created IOMMU domain ffff88058377c9a0
device eth0 entered promiscuous mode
power state: 0
vboxpci: iommu_attach_device() success

ホストを再起動せずにゲストOSを2回目に起動すると、「ようこそ」フェーズでディスプレイが再び停止します。しかし、強制的にシャットダウンしなくてもWindowsのショートカットを使用してコンピュータをシャットダウンすることができたため、間違いなくログイン手順は完了しました。

今、アイデアが不足しています...どのように機能するかについての提案がありますか?より多くの情報を提供できますか?

アップデート2:

dmesgもう少し興味深いエラーが含まれていますが、これについて何をすべきかわかりません。

IOMMU 0 0xfbfff000: using Queued invalidation
IOMMU 1 0xfbffe000: using Queued invalidation
------------[ cut here ]------------
WARNING: at /build/buildd/linux-3.5.0/drivers/iommu/intel-iommu.c:4254 init_dmars+0x39b/0x74f()
Hardware name: System Product Name

Your BIOS is broken; DMA routed to ISOCH DMAR unit but no TLB space.

BIOS vendor: American Megatrends Inc.; Ver: 0811   ; Product Version: System Version
...
Your BIOS is broken; RMRR ends before it starts!

答え1

私はNVIDIA GTX 760とVGAパススルーを備えたvfio-vga用のハイパーバイザーとしてKVMを使用しています。 Virtualboxでは使ったことがありません。痛いですが、正しく設定すると、うまく機能します。 KVMは、デスクトップ上で仮想マシンをすばやく作成するためのVirtualboxと同じくらい便利で、代替として考えることができます。

このスレッドには、さまざまな構成およびトラブルシューティング手順に関する多くの情報が含まれており、非常に便利です。https://bbs.archlinux.org/viewtopic.php?id=162768

答え2

Nvidiaドライバで利用可能なリソースが十分に見つからないと表示された場合は、デバイスマネージャでエミュレートされた「標準VGAアダプタ」を無効にしてみてください。ゲストを再起動すると、次の順序で発生することを確認できます。

1) VM POST/ブートがエミュレートされた VGA アダプタで発生します。 2)ログイン画面に入る前に、エミュレートされたVGAアダプタが空白で表示されます。 3)NvidiaドライバがパススルーGPUをロードして起動すると、Nvidiaカードにログイン画面が表示されます。

運が良ければ、その時点から仕事が順調に進むこともあります。同様の設定でXenを使用すると、これが発生します。結果を報告してください。 :)

答え3

2つの異なる問題があるようです。 VGAパススルー機能を使用するには、再起動は本当に難しいです。 Xenでは、VGAデバイスはしばしばリムーバブルデバイスとして表示され、一部の人は再起動する前にデバイスを「取り出す」方が良いかもしれません。

コード12エラーを修正するには、Windowsデバイスマネージャで仮想ビデオデバイスを無効にするだけです。

答え4

HP dc7900でテストした結果、「IOMMUが見つかりました」というメッセージが表示されました。

統合ビデオを無効にする

iommu=calgary intel_iommu=on intel_iommu=igfx_off

関連情報