web-dev-qa-db-ja.com

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

短い質問:

Linuxカーネルでintel_iommu設定をオンにするにはどうすればよいですか? 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を何年もずっと楽しく使っているとき。

ホストシステム

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

[〜#〜] bios [〜#〜]

BIOS設定で、VT-xおよびVT-dサポートを有効にしています。しかし、IOMMUについて具体的に言及しているものは何も見つかりませんでした。

PCIデバイスの接続

これは驚くほど驚くほど簡単でした! VirtualBoxの公式ドキュメントは here です。私が行ったことは、あいまいさが少ないと感じましたが、nvidia-settingsを開き、セカンダリグラフィックスカードを選択して、バスID(私の場合は「PCI:5:0:0」)をメモしました。次に、ホストのコマンドラインから:

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

(これを最初に実行したとき、VirtualBoxがPIIXチップセットをエミュレートしていたためエラーが発生しました。PCIパススルーはICH9チップセットでのみ機能するということでした。そのため、VirtualBoxでチップセットをICH9に変更しました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)

これを修正する方法はありますか?

UPDATE:

カーネルが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をもう一度起動すると、「ようこそ」の段階で表示が再びフリーズします。 Windowsショートカットを使用して、強制的にシャットダウンせずにマシンをシャットダウンできるため、ログイン段階は確実に終了します。

今、私はちょっとアイデアがなくなった...これを機能させるための提案はありますか?これ以上提供できる情報はありますか?

UPDATE2:

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!
16
Alex Leach

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

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

2
Josh

2つの別々の問題があるようです。 VGAパススルーで動作するように再起動することは、本当の意味があるかもしれません。 Xenでは、VGAデバイスはリムーバブルデバイスとして表示されることが多く、一部の人々は再起動する前にデバイスを「イジェクト」する方がうまくいっています。

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

0
StrongBad

/etc/grubで次のいずれかを設定してみてください:

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

新しいAMD 64ビットシステムを使用していて、LinuxがNvidiaで問題を起こしていることと、BIOSのiommu設定によってDMA設定が原因であることがわかったので、これらをgrubで設定すると解決しました。

詳細はこちら を参照してください。

0
Steve LinuxBlue

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

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

少し運が良ければ、それ以降は問題なく動作することがわかります。これは多かれ少なかれ、Xenでの私の同様のセットアップで何が起こるかです。結果を報告してください。 :)

0
powerload79