Intel GVT-g: compartilhando a GPU Intel com convidados QEMU/KVM

O artigo tem como objetivo explicar e orientar a respeito da tecnologia Intel GVT-g (iGVT-g), que permite passar a GPU Intel para vários convidados KVM e Xen enquanto mantendo-a disponível para o hospedeiro. O foco está em configurar convidados KVM, os quais eu configurei e uso com sucesso. É descrito o que é a tecnologia iGVT-g e seus possíveis usos, é dada uma explicação das configurações necessárias no hospedeiro para obter um bom desempenho e manter o sistema estável, é explicado como configurar convidados Linux, com foco no Xubuntu 18.04, e Windows 10. Por fim, há resultados de benchmarks comparando o hospedeiro e o convidado usando iGVT-g.

[ Hits: 12.659 ]

Por: FurretUber em 24/07/2018


Preparando o convidado Linux com dma-buf



Para usar o dma-buf, é necessário usar o kernel Linux com a versão mínima 4.16. Com a versão 4.15 a tela não é carregada, impossibilitando visualizar o convidado.

Ainda no hospedeiro

Tendo a versão mínima do kernel Linux e o QEMU construído com GTK e OpenGL (explicado anteriormente), pode-se criar o convidado. Nesse exemplo é criada uma GPU virtual com 128 MB de memória e resolução máxima de 1920x1200 (é necessário ver se a GPU tem esse modo disponível):

uuid
d4253d2e-73d8-11e8-a4b7-cb5f65b15073

sudo sh -c 'echo d4253d2e-73d8-11e8-a4b7-cb5f65b15073 > /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_4/create'

Com a GPU virtual criada, pode-se iniciar o convidado usando um comando como (adapte conforme suas configurações e caminhos):

sudo qemu-system-x86_64 -m 1280 -enable-kvm -cpu host
-smp cores=2,threads=2 -device vfio-pci,sysfsdev=/sys/bus/pci/devices/0000:00:02.0/d4253d2e-73d8-11e8-a4b7-cb5f65b15073,x-igd-opregion=on,rombar=0,display=on,x-vga=off
-monitor vc -display gtk,gl=on -vga none -serial stdio -hda bionicdma.vdi
-cdrom "xubuntu-18.04-desktop-amd64.iso"
-bios /usr/share/ovmf/OVMF.fd -netdev user,id=net0 -device e1000,netdev=net0


Explicação do comando (não se surpreenda se algumas partes forem iguais à página anterior):

A máquina virtual tem 1280 MB de memória RAM. Usa KVM, a CPU é do mesmo modelo do hospedeiro, foram designadas dois núcleos da CPU, cada um deles com duas threads.

A GPU virtual foi designada com o display=on, ou seja, com dma-buf. A falta da opção igd-opregion=on pode gerar graves problemas de estabilidade no hospedeiro. O modo vga não funciona, então está desligado, rombar=0 porque não há nenhuma ROM a ser utilizada.

O terminal (ele é chamado de monitor, de onde se podem adicionar dispositivos USB ou enviar comandos ao convidado enquanto o convidado está em execução, por exemplo) do QEMU está em um console virtual que pode ser acessado da própria interface (depende da opção -display), foi escolhida a interface GTK para exibir a máquina virtual e a aceleração OpenGL será utilizada na janela GTK, não há uma VGA virtual pois não há necessidade e a porta serial está no stdio (no terminal se aberto por ele).

Uma imagem VDI foi escolhida como HD, uma ISO é usada como CD-ROM e o firmware UEFI do OVMF foi escolhido como o firmware da máquina virtual.

A rede escolhida é do tipo usuário, com o id net0. O controlador Ethernet virtual é um 82540EM Gigabit Ethernet Controller, que usa a netdev com o id net0. Não há a necessidade de redirecionar portas dessa vez, pois não há a necessidade de visualizar a tela com protocolos remotos.

Hospedeiro e convidado juntos, atenção

A inicialização da máquina virtual nesse modo é bastante peculiar. O GRUB2 aparece, mas não na janela da máquina virtual, e sim no terminal! Isso ocorre porque o framebuffer está sendo passado pela porta serial, e no comando do QEMU foi configurado que a porta serial fosse o stdio. Relevando esse fato, o GRUB2 funciona como o GRUB2, permitindo escolher as opções e editá-las.
Uma vez escolhida, a inicialização começa e as mesmas mensagens avisando sobre a inicialização em modo cego aparecem, mas então a janela GTK é inicializada. Devem aparecer algumas mensagens referente ao UEFI e pode surgir uma mensagem de erro da GPU virtual, acusando a ausência do firmware (devido a rombar=0 e x-vga=off), mas o convidado inicia normalmente. Instale o convidado como se fosse um convidado comum e reinicie quando a instalação terminar.

O convidado está pronto.
Não se assustem, é Xubuntu 18.04 mesmo.

Isso funciona com outras distribuições também, como com o openSUSE Tumbleweed:
Linux: Intel GVT-g: compartilhando a GPU Intel com convidados QEMU/KVM
Pode parecer inacreditável, mas é isso mesmo. Utilizando o dma-buf é mais complicado de deixar o hospedeiro pronto, mas a configuração necessária no convidado Linux é zero.

A configuração opcional no convidado é trocar o driver de vídeo de "modesetting" para "intel", como foi feito no hospedeiro e no convidado sem dma-buf. Inicialmente, deve-se ter certeza de que o driver intel está instalado. No Ubuntu 18.04, para instalá-lo pode se utilizar:

sudo apt install xserver-xorg-video-intel

Então criar/editar o arquivo /etc/X11/xorg.conf:

sudo nano /etc/X11/xorg.conf

E deixá-lo com o seguinte conteúdo:

Section "Device"
   Identifier  "Intel Graphics"
   Driver      "intel"
   Option      "DRI"    "3"
EndSection

Reiniciando a sessão do LightDM altera o modo:

sudo systemctl restart lightdm

Uma vez que foi concluído o uso do convidado, remova a GPU virtual:

sudo sh -c 'echo 1 > /sys/bus/pci/devices/0000:00:02.0/d4253d2e-73d8-11e8-a4b7-cb5f65b15073/remove'

Página anterior     Próxima página

Páginas do artigo
   1. O que é Intel GVT-g
   2. dma-buf e sua importância
   3. Preparando o convidado Linux sem dma-buf
   4. Preparando o convidado Linux com dma-buf
   5. Preparando o convidado Windows
   6. Observações adicionais, resultados obtidos e referências
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Instalando a DD-WRT em roteadores Linksys WR54G*

Implementando servidor de aplicações PHP utilizando Zend Framework

Gerenciamento de Lan House com Main Control System

Usando o gerenciador de arquivos XFE para administrar as tarefas no Linux

Instalando o Gaim-vv no Slackware 10

  
Comentários
[1] Comentário enviado por betin93 em 07/08/2018 - 16:17h

Belo artigo, com um passo a passo fantastíco. Me lembrei da minha luta para compartilhar a minha placa de vídeo pelo KVM com o GPU Passtrough aheuaehaeu.

Evoluir significa enxergar além do horizonte.

[2] Comentário enviado por edps em 19/08/2018 - 11:10h

Também gostei muito deste artigo, a começar por ser bastante detalhado.

Notei também que o openSUSE Leap 15 é uma distribuição onde tudo está OK quanto aos passos iniciais propostos aqui, então, acho que bastará apenas adicionar as entradas sugeridas em /etc/default/grub e instalar o driver xf86-video-intel.

Muchas gracias.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts