GNU/Linux >> Linux の 問題 >  >> Linux

Linux –グラフィックカードパススルーのカーネルでIommuを有効にしますか?

簡単な質問:

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

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

vboxpci: No IOMMU domain (attach)

長い質問:

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

最近、PCI-expressデバイスを介してVirtualboxで実行されているゲストOSにパスできることに気付きました。かっこいいと思いました! 2枚のNVIDIAQuadroFXグラフィックカードを持っており(SLIブリッジ接続が設定されているので、問題が発生しないことを願っています)、2枚目のグラフィックカードをゲストOS専用にして、OpenGL機能を使用できるようにします。 Photoshop他

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

ホストシステム

非常にハイエンドのワークステーション機器(IntelICH10RチップセットとXeonW3680CPUを搭載したAsusP6T7 WSスーパーコンピューターマザーボード)でDebianリポジトリからlinux-3.5.0-19を実行しており、カーネルで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システム設定でチップセットをICH9に変更し、ゲストをオンにしました。必要な新しいドライバをインストールします。後で再起動するとすべてが正常に機能していたので、ゲストをシャットダウンしてコマンドを再実行しました。)

出力がなく、すぐにコマンドラインに戻りました。

ゲストからのホストGPUの使用

ゲストをオンにする前に、仮想ボックス-dkmsによって、カーネルで文書化されていないことが発生する必要がある場合に備えて、最初にホストマシンを再起動しました。 sudoなしで前のコマンドを実行したので 特権ですが、変更が加えられたとは思えません。

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

問題

グラフィックカードドライバがゲストにインストールされ、PCIデバイスが接続されたため、Windowsデスクトップにアクセスできません。 Windowsのログイン画面が表示され、ログインした後、画面がフリーズし、「ようこそ」と表示され、回転する必要がありますが、横に青い円が表示されます。

関連:Linux – Linuxはデフォルトのアプリケーションをどのように決定しますか?

/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をもう一度起動すると、「ようこそ」の段階で表示が再びフリーズします。ただし、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!

承認された回答:

VGAパススルーをNVIDIAGTX760で動作させ、KVMをvfio-vgaのハイパーバイザーとして使用しました。 Virtualboxで試したことはありません。面倒でしたが、構成を正しく行った後はうまく機能します。 KVMは、デスクトップからすばやくVMを実行するためのVirtualboxと同じくらい便利であり、別のオプションと見なすことができます。

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


Linux
  1. 初心者向けのLinuxターミナルガイド

  2. Linuxカーネルをftraceで分析する

  3. Linuxカーネルの継続的インテグレーションテスト

  1. Linuxコマンドラインに関する8つのヒント

  2. ニンテンドーWii用のLinuxカーネル?

  3. Linux –カーネルツリーでヘッドフォン用のLinuxドライバーを見つけますか?

  1. Linuxカーネル:イノベーショントップ5

  2. Linuxカーネルテストのライフサイクル

  3. Linux –カーネルでUser_namespacesを有効にする方法は? (非特権の `unshare`の場合。)?