NVIDIA liberó los parches vGPU para Linux
Hace algunos días, NVIDIA dio a conocer, mediante las listas de correo del Kernel, la liberación de un conjunto de parches que implementa su tecnología vGPU. Estos parches, permite el uso de las GPU virtuales de NVIDIA en sistemas de virtualización, ofreciendo un potente rendimiento de GPU para diversas cargas de trabajo, que van desde estaciones de trabajo virtuales con alto procesamiento gráfico hasta aplicaciones de ciencia de datos e inteligencia artificial.
La vGPU divide los recursos de la GPU física de NVIDIA en hardware, asignando a cada vGPU su propia función virtual PCI Express (VF). Esto significa que se pueden ejecutar sistemas invitados que realicen diversas tareas aprovechando al máximo los recursos disponibles.
Se menciona que cada vGPU de NVIDIA funciona de manera similar a una GPU convencional, ya que cuenta con una cantidad fija de búfer de cuadros y una o más salidas de pantalla virtuales, también conocidas como «heads». El búfer de cuadros de la vGPU se asigna desde el búfer de cuadros de la GPU física en el momento de su creación, y la vGPU mantiene el uso exclusivo de ese búfer hasta que es destruida.
Permite que el equipo de TI aproveche los beneficios de administración y seguridad de la virtualización, así como el rendimiento de las GPU NVIDIA necesarias para las cargas de trabajo modernas. Instalado en una GPU física en un servidor de centro de datos empresarial o en la nube, el software NVIDIA vGPU crea GPU virtuales que se pueden compartir entre varias máquinas virtuales.
El controlador es compatible con tarjetas gráficas NVIDIA basadas en la microarquitectura Ada Lovelace, y la cantidad de vGPU que puedes crear depende del modelo de tu tarjeta de video.
En el sistema host, el controlador modificado Nouveau se encarga de crear y emparejar las vGPU con los sistemas invitados. Por su parte, en el sistema invitado, se utilizan controladores NVIDIA propietarios estándar. Esto asegura que las capacidades de la vGPU se asemejen a las de una GPU normal, permitiendo que se asigne una parte de la memoria desde el framebuffer de la GPU física a la vGPU, garantizando que solo la vGPU la utilice.
Existen varios tipos de vGPU, cada uno diseñado para diferentes propósitos, con distintas capacidades de memoria de video, cantidad de pantallas virtuales y resoluciones máximas.
La implementación abarca el controlador básico nvkm, que se construye sobre el controlador abierto Nouveau, así como el administrador de vGPU, denominado vgpu_mgr, que funciona como un módulo VFIO (Virtual Function I/O). Este administrador se encarga de funciones clave como crear y eliminar vGPU, seleccionar su tipo y proporcionar una API para el control desde el espacio de usuario.
El módulo NVIDIA vGPU VFIO junto con VFIO se encuentra en VFs, proporciona funciones y administración extendidas, por ejemplo, selección de los tipos de vGPU, compatibilidad con migración en vivo y actualización en caliente del controlador.
Al igual que otros dispositivos compatibles con VFIO, VFIO proporciona las
API de espacio de usuario estándar para la administración del ciclo de vida del dispositivo y compatibilidad con funciones avanzadas.El administrador de NVIDIA vGPU proporciona el soporte necesario al controlador de variante NVIDIA vGPU VFIO para crear/destruir vGPU, consultar los tipos de vGPU disponibles, seleccionar el tipo de vGPU, etc.
El administrador de vGPU interactúa con el controlador de GPU subyacente, el cual accede directamente al hardware. Además, carga el firmware GSP, administrador de vGPU de NVIDIA realiza las siguientes funciones:
- Administra los recursos de hardware compartidos/particionados. Por ejemplo, reservar memoria FB,
canales para que el administrador de vGPU cree vGPU. - Manejo de excepciones. Por ejemplo, entregar los eventos de GSP al administrador de vGPU.
- Envío de eventos del host. Por ejemplo, suspender/reanudar.
- Enumeraciones de la configuración de hardware.
Finalmente, si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace, asi como también puedes ver el código en acción en el siguiente video. Las pruebas de código se realizaron un Ubuntu 24.04 como sistema operativo invitado.