Virtualização de passagem GPU com KVM ou VirtualBox
Para um projeto de pesquisa, preciso passar uma GPU PCI de um host do Ubuntu para um convidado do Windows 8.1. Precisamos testar uma determinada configuração, onde o convidado realiza tarefas intensivas de GPU. Tentei seguir este tutorial com KVM e também VirtualBox. Agora, antes de investirmos em hardware caro, gostaríamos de testar a configuração com alguns hardwares mais antigos que dispúnhamos no laboratório. Estou ciente de que a configuração é muito dependente do hardware, mas quero aprender como posso excluir erros.
Eu tentei o KVM e o VirtualBox até agora, mas acho que meu problema está relacionado a esse erro no log do 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)
De onde vem isso?
Gostaria de saber qual componente causa esse erro. Eu vejo muitas pessoas tendo esse problema, mas não há resposta disponível, que se aplicaria a vários cenários.
O hardware que eu uso
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.
Como a primeira mensagem do dmesg mostra Intel-IOMMU: enabled, presumo que isso funcione.
Detalhes da GPU do lshw:
*-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
Agora, verifiquei os recursos de CPI com:
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 dá:
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)
A KVM diz que está tudo bem:
~$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
Eu também tentei pci-stub.ids = 10de: 104a, onde 10de: 104a é o ID do GPU no grub. Como posso ter certeza de onde a mensagem DMAR vem e qual componente causa a desativação?