Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 12. Gerenciando os dispositivos NVIDIA vGPU

O recurso vGPU torna possível dividir um dispositivo GPU NVIDIA físico em múltiplos dispositivos virtuais, referidos como mediated devices. Estes dispositivos mediados podem então ser atribuídos a múltiplas máquinas virtuais (VMs) como GPUs virtuais. Como resultado, estas VMs podem compartilhar a performance de uma única GPU física.

Importante

A atribuição de uma GPU física a VMs, com ou sem o uso de dispositivos mediados, torna impossível para o host utilizar a GPU.

12.1. Configurando os dispositivos NVIDIA vGPU

Para configurar o recurso NVIDIA vGPU, você precisa baixar os drivers NVIDIA vGPU para seu dispositivo GPU, criar dispositivos mediados e atribuí-los às máquinas virtuais previstas. Para instruções detalhadas, veja abaixo.

Pré-requisitos

  • O pacote mdevctl está instalado.

    # yum install mdevctl
  • Sua GPU suporta dispositivos mediados por vGPU. Para uma lista atualizada das GPUs NVIDIA que suportam a criação de vGPUs, consulte a Documentação de Software de GPU NVIDIA.

    • Se você não souber qual GPU seu host está usando, instale o pacote lshw e use o comando lshw -C display. O exemplo a seguir mostra que o sistema está usando uma GPU NVIDIA Tesla P4, compatível com a vGPU.

      # lshw -C display
      
      *-display
             description: 3D controller
             product: GP104GL [Tesla P4]
             vendor: NVIDIA Corporation
             physical id: 0
             bus info: pci@0000:01:00.0
             version: a1
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi pciexpress cap_list
             configuration: driver=vfio-pci latency=0
             resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff

Procedimento

  1. Faça o download dos drivers NVIDIA vGPU e instale-os em seu sistema. Para instruções, consulte a documentação da NVIDIA.
  2. Se o instalador do software NVIDIA não criou o arquivo /etc/modprobe.d/nvidia-installer-disable-nouveau.conf, crie um arquivo conf com qualquer nome em /etc/modprobe.d/, e acrescente as seguintes linhas no arquivo:

    blacklist nouveau
    options nouveau modeset=0
  3. Regenerar o ramdisco inicial para o kernel atual, depois reiniciar.

    # dracut --force
    # reboot
  4. Verifique se o kernel carregou o módulo nvidia_vgpu_vfio e se o serviço nvidia-vgpu-mgr.service está funcionando.

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]
  5. Gerar um dispositivo UUID.

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
  6. Crie um dispositivo mediado a partir do hardware da GPU que você detectou nos pré-requisitos, e atribua a UUID gerada ao dispositivo.

    O exemplo a seguir mostra como criar um dispositivo mediado do tipo nvidia-63 vGPU em uma placa NVIDIA Tesla P4 que roda no barramento PCI 0000:01:00.0:

    # mdevctl start -u 30820a6f-b1a5-4503-91ca-0c10ba58692a -p 0000:01:00.0 --type nvidia-63
    Nota

    Para os valores do tipo vGPU para dispositivos específicos de GPU, consulte a documentação do software Virtual GPU.

  7. Tornar o dispositivo mediado persistente:

    # mdevctl define --auto --uuid 30820a6f-b1a5-4503-91ca-0c10ba58692a

  8. Anexe o dispositivo mediado a uma VM que você deseja compartilhar os recursos do vGPU. Para isso, adicione as seguintes linhas, juntamente com a UUID previamente gerada, às seções <devices/> na configuração XML da VM.

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    Note que cada UUID só pode ser atribuída a uma VM de cada vez.

  9. Para que a funcionalidade completa dos dispositivos mediados pelo vGPU esteja disponível nas VMs designadas, configure o licenciamento do software convidado NVIDIA vGPU nas VMs. Para maiores informações e instruções, consulte o Guia do Usuário do Servidor de Licença do Software NVIDIA Virtual GPU.

Verificação

  • Liste os dispositivos mediados ativos em seu host. Se a saída exibir um dispositivo definido com o UUID usado no procedimento, o NVIDIA vGPU foi configurado corretamente. Por exemplo:

    # mdevctl list
    85006552-1b4b-45ef-ad62-de05be9171df 0000:01:00.0 nvidia-63
    30820a6f-b1a5-4503-91ca-0c10ba58692a 0000:01:00.0 nvidia-63 (defined)

Recursos adicionais

  • Para mais informações sobre o uso do utilitário mdevctl, use man mdevctl.