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가 비활성화됩니다.