Virtualização de passagem GPU Linux - Verifique se o componente causa problemas

1

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?

    
por Stefan 10.03.2015 / 12:09

1 resposta

1

A mensagem "DMAR: Desabilitando o IOMMU para gráficos neste chipset" vem do kernel, especificamente link . Essa peculiaridade foi introduzida no link (os bugs vinculados a partir daí fornecem informações básicas úteis); aparentemente seu chipset tem bugs que causam falhas quando o IOMMU é usado com gráficos.

Não sei se as falhas realmente afetam os gráficos integrados ou se impediriam o uso de um adaptador separado como você está tentando fazer. Se eu estou entendendo o código-fonte corretamente, a peculiaridade desativa todos os IOMMUs para dispositivos gráficos.

    
por 10.03.2015 / 14:19