使用 KVM 或 VirtualBox 进行 GPU 直通虚拟化

使用 KVM 或 VirtualBox 进行 GPU 直通虚拟化

使用 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:已启用,我认为这是可行的。

来自 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。

相关内容