Linux GPU 直通虛擬化 - 驗證 wich 組件會導致問題
使用 KVM 或 VirtualBox 的 GPU 直通虛擬化
對於一個研究項目,我需要將 PCI GPU 從 Ubuntu 主機傳遞到 Windows 8.1 來賓。我們需要測試一個特定的設置,來賓執行 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 消息來自何處以及導致禁用的組件是什麼?
“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。