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


16

短い質問:

intel_iommuLinuxカーネルの設定を有効にするにはどうすればよいですか?grub2ブートローダーを使用して、Debianホストを実行します。私が見たドキュメントは編集/boot/grub/menu.lstするように言っていますが、それはgrub 1.xにのみ関連しているようです、私はそのファイルを持っていないので。

このブートオプションを変更すると、次のエラーメッセージが表示されなくなる可能性があることを理解しています(そして最後に考えられるオプション)。 /var/log/kern.log

vboxpci: No IOMMU domain (attach)

長い質問:

ゲストOSにグラフィックカードへの直接アクセスを許可する

最近、PCI Expressデバイスを介してVirtualboxで実行されているゲストOSに渡すことができることに気付きました。かっこいい!2枚のNVIDIA Quadro FXグラフィックカード(SLIブリッジ接続があり、悲しみを引き起こさないことを願っています)があり、2番目のグラフィックカードをゲストOS専用にして、OpenGL機能を使用できるようにします。 Photoshopなど。

NVIDIAは、この「SLI Multi-OS」構成を販売しています。これは基本的に私が長年設定したかったものですが、仮想化ソフトウェア(Parallelsワークステーションエクストリーム)に大金をかけたくありません。 VirtualBoxを何年も使用して非常に満足しています。

ホストシステム

Debianリポジトリからlinux-3.5.0-19を非常にハイエンドのワークステーション機器(Asus P6T7 WSスーパーコンピューターmobo w / Intel ICH10RチップセットおよびXeon W3680 CPU)で実行しており、カーネルでIOMMUサポートを有効にしたいできれば自分でコンパイルする必要はありません。

BIOS

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 System設定で必要な新しいドライバーをインストールします。後で再起動するとすべてが正常に機能したので、ゲストをシャットダウンしてコマンドを再実行しました。

出力がなかったため、ほぼすぐにコマンドラインに戻りました。

ゲストからホスト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番目のグラフィックカードが何も出力していません。

デバイスマネージャーでは、Quadro FXデバイスの横に感嘆符があり、デバイスプロパティにエラーコード12があり、「このデバイスは十分な空きリソースを見つけることができません」というメッセージが表示されます。上のさらなる説明technet.microsoft.com

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

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
IOMMU設定は、ハードウェアがサポートしている場合、Debian安定版ではデフォルトでアクティブになっているはずです。ログでトラブルや大量のエラーを引き起こしていたため、で無効にしなければなりませんでしたintel_iommu=soft。渡すことができintel_iommu=onます。
マルコ

1
かっこいい、ファイルと行を見つけて、これを変更する場所。KDEのgrub-configモジュールはに置かCONFIG_CMDLINE_LINUX=intel_iommu=on/etc/default/grubます。さて、ゲストは起動するが、グラフィックスカードを検出しません...
アレックス・リーチ

intel_iommu=soft有効なカーネルオプションではないようintel_iommu=onです。使用すると、.. に戻ります。www.kernel.orgからは入手できますがiommu=soft、そのためのドキュメントは見つかりません。しますか?
アレックスリーチ

3
そのとおりですiommu=soft。ハードウェアIOMMU(システムで多数のDMAエラーを引き起こす)を無効にし、代わりにソフトウェアIOMMUを使用します。ここでは、古いスレッドへのリンクです:IOMMUを使用するための提案は、すべてのカーネルパッケージ用ソフト=
マルコ

ありがとう。次回の再起動時に、これを試してみるかもしれません。ただし、ハードウェアはすべてIOMMUをサポートしているため、ソフトウェアエミュレーションが良いアイデアかどうかはわかりません。関連ノートではなく、必ず私のGPUがDMARユニットを持ち、それが使用することをお勧めだろうか場合は、On intel_iommu=igfx_off...
アレックス・リーチ

回答:


2

KVMをvfio-vgaのハイパーバイザーとして使用して、NVIDIA GTX 760で動作するVGAパススルーを取得しました。Virtualboxで試したことはありません。苦労しましたが、設定を正しく行った後はうまく機能します。KVMは、デスクトップからすばやくVMを実行するためのVirtualboxと同じくらい便利であり、別のオプションとして検討することもできます。

このスレッドには、さまざまな設定やトラブルシューティング手順に関する多くの情報があり、本当に役に立ちました:https : //bbs.archlinux.org/viewtopic.php?id=162768


1
CUDAは機能しますか?
アレクサンドルドゥビンスキー

そのブログは現在、時代遅れすると主張し、推奨していますvfio.blogspot.com
アレクサンドル・ダビンスキー氏

まあ、コールドゼロから効率的なKVM + qemuをセットアップするのはそれほど速くないかもしれません。
シチルジュ

@AleksandrDubinsky、現在CUDAを機能させるには、特定のLinuxカーネルを使用する必要があります
Gabriel Fair

0

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

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

少し運が良ければ、そこからうまくいくことがわかるかもしれません。これは多かれ少なかれ、Xenでの私の似たような設定で起こることです。結果を報告してください。:)


0

2つの問題があるようです。VGAパススルーで動作するように再起動することは、本当の負担になる可能性があります。Xenでは、VGAデバイスはリムーバブルデバイスとして表示されることが多く、一部の人は再起動する前にデバイスを「イジェクト」する方が幸運でした。

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


0

以下のいずれかを設定してみてください/etc/grub

  • iommu=memmaper
  • iommu=soft
  • vga=normal
  • vesa=0

私は新しいAMD 64ビットシステムを使用しており、LinuxにはBIOSのiommu設定が原因でNvidiaとDMAの設定に問題があることがわかりました。

詳細はこちらをお読みください。


-1

HP dc7900でテストして、「IOMMUが見つかりました」というメッセージを確認します。

統合ビデオを無効にする

iommu=calgary intel_iommu=on intel_iommu=igfx_off
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.