KVMまたはVirtualBoxを使用したGPUパススルー仮想化
研究プロジェクトでは、UbuntuホストからWindows 8.1ゲストにPCI GPUを渡す必要があります。ゲストがGPU集約的なタスクを実行する設定をテストする必要があります。私はこれに従おうとしています。地図時間KVM と VirtualBox で使用されます。今、高価なサーバークラスのハードウェアに投資する前に、ラボで利用可能な古いハードウェアを使って設定しようとしています。この設定はハードウェアによって非常に異なることを知っていますが、エラーを解決する方法を知りたいです。
これまでKVMとVirtualBoxを試してみましたが、私の問題はdmesgログの次のエラーに関連しているようです。
~$ dmesg | grep -e IOMMU -e DMAR
[ 0.000000] Intel-IOMMU: enabled
[ 0.148515] DMAR: Forcing write-buffer flush capability
[ 0.148516] DMAR: Disabling IOMMU for graphics on this chipset
[ 24.487950] vboxpci: IOMMU not found (not registered)
これはどこから来たのですか? どのコンポーネントがこのエラーを引き起こすかを知りたいです。多くの人がこの問題を経験していますが、さまざまな状況に適用できる答えはありません。
私が使用するハードウェア
Motherboard: P5Q-EM, ASUSTeK Computer INC.
BIOS (updated and virtualization enabled)
CPU: Intel(R) Core(TM)2 Quad CPU Q9300 @ 2.50GHz
GPU 1: Intel Corporation 4 Series Onboard
GPU 2: GeForce GT 610 (should be passed through)
OS: Ubuntu Server 14.04.2 LTS (with desktop installed)
Grub parameters: intel_iommu=on.
最初のdmesgメッセージにIntel-IOMMU:Enabledが表示されているので、これが可能だと思います。
lshwのGPUの詳細:
*-display UNCLAIMED
description: VGA compatible controller
product: GF119 [GeForce GT 610]
vendor: NVIDIA Corporation
physical id: 0
bus info: pci@0000:04:00.0
version: a1
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress vga_controller cap_list
configuration: latency=0
resources: memory:fd000000-fdffffff memory:f0000000-f7ffffff memory:fa000000-fbffffff ioport:ec00(size=128) memory:feb00000-feb7ffff
これで、次のコマンドを使用してCPI機能を確認しました。
ubuntu~$ grep -E "(vmx|svm)" --color=always /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dtherm tpr_shadow vnmi flexpriority
lspci -nn は以下を提供します。
00:02.0 VGA compatible controller [0300]: Intel Corporation 4 Series Chipset Integrated Graphics Controller [8086:2e22] (rev 03)
00:02.1 Display controller [0380]: Intel Corporation 4 Series Chipset Integrated Graphics Controller [8086:2e23] (rev 03)
05:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF119 [GeForce GT 610] [10de:104a] (rev a1)
05:00.1 Audio device [0403]: NVIDIA Corporation GF119 HDMI Audio Controller [10de:0e08] (rev a1)
KVMは問題ないと言います。
~$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
また、 pci-stub.ids=10de:104a を試しました。ここで、10de:104a は grub の GPU ID です。 DMARメッセージのソースと無効化の原因となるコンポーネントをどのように確認できますか?
答え1
「DMAR:このチップセットのグラフィックに対してIOMMUを無効にする」メッセージはカーネル、特にhttp://lxr.free-electrons.com/source/drivers/iommu/intel-iommu.c?v=3.19#L4634。この特異点はhttps://lkml.org/lkml/2013/2/1/327(ここにリンクされているバグは有用な背景情報を提供します。)明らかに、IOMMUをグラフィックスと共に使用するとクラッシュするバグがチップセットにあります。
これらのバグが実際に組み込みグラフィックにのみ影響するのか、それとも別のアダプタを使用できないのかは、議論では不明です。ソースコードを正しく理解すると、この問題によりグラフィックデバイスのすべてのIOMMUが無効になります。