virtio-nvgpu — um módulo para fornecer acesso à GPU NVIDIA a partir de máquinas virtuais KVM

O projeto virtio-nvgpu desenvolve um dispositivo virtio que permite o acesso à GPU NVIDIA a partir de sistemas convidados executados sob o hipervisor KVM, com perda de desempenho mínima. Ele consiste em um módulo de kernel, carregado no sistema convidado, e um dispositivo virtio, executado no lado do ambiente host. O código do módulo do kernel é escrito em C e é distribuído sob a licença GPLv2, enquanto o código do dispositivo virtio é escrito em Rust e é distribuído sob a licença Apache 2.0.

De acordo com os desenvolvedores, a perda de desempenho ao acessar a GPU não ultrapassa 2%. A alta velocidade é alcançada graças à redireção de chamadas ioctl para o driver nativo da NVIDIA e à operação no nível ABI do driver NVIDIA, sem tradução de solicitações no nível da API. No lado do sistema convidado, são utilizadas bibliotecas padrão e drivers de alto nível da NVIDIA que operam no espaço do usuário.

No sistema convidado, é carregado um módulo de kernel que fornece arquivos de dispositivos /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm e encaminha as chamadas ioctl() e mmap() através da virtqueue para um manipulador no lado do ambiente host, que as passa para o driver da NVIDIA do host. Para evitar trocas de contexto entre o sistema host e a máquina virtual, os buffers de comando são refletidos (mmap) na memória compartilhada, acessível ao ambiente host e à GPU.

Ao contrário da passagem exclusiva de acesso à GPU (VFIO Passthrough), o projeto virtio-nvgpu fornece acesso compartilhado a uma única GPU de vários sistemas convidados. máquinas virtuais, e ao contrário do virtio-gpu (Venus, VirGL), trabalha através do encaminhamento de ABI para o driver NVIDIA, e não no nível de tradução das APIs gráficas Vulkan e OpenGL. As desvantagens do virtio-nvgpu incluem a falta de isolamento completo baseado em IOMMU (os sistemas convidados operam através do driver host da NVIDIA e são limitados apenas à filtragem de chamadas ioctl) e a dependência do ABI dos drivers NVIDIA (o ABI muda a cada versão e requer adaptação do virtio-nvgpu).

As capacidades do virtio-nvgpu são suficientes para renderização, codificação de vídeo e cálculos utilizando as APIs Vulkan, OpenGL, NVENC e CUDA. A principal área de aplicação mencionada é a criação de serviços de jogos em nuvem ou estações de trabalho virtuais, nas quais um jogo ou aplicativo gráfico é executado em máquina virtual, onde a renderização é realizada, a codificação de hardware do resultado é feita com NVENC e a saída é transmitida para o usuário remoto na forma de um fluxo de vídeo comprimido.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster