La virtualización de GPU se refiere a tecnologías que permiten el uso de una GPU para acelerar gráficos o aplicaciones GPGPU que se ejecutan en una máquina virtual . La virtualización de GPU se utiliza en diversas aplicaciones, como la virtualización de escritorios , [ 1 ] los juegos en la nube [ 2 ] y la ciencia computacional (por ejemplo, simulaciones hidrodinámicas ). [ 3 ]
Las implementaciones de virtualización de GPU generalmente involucran una o más de las siguientes técnicas: emulación de dispositivos, acceso remoto a la API, paso directo fijo y paso directo mediado. Cada técnica presenta diferentes ventajas y desventajas con respecto a la relación de consolidación de máquina virtual a GPU , aceleración gráfica , fidelidad de renderizado y soporte de funciones , portabilidad a diferentes hardware, aislamiento entre máquinas virtuales y soporte para suspensión/reanudación y migración en vivo . [ 1 ] [ 4 ] [ 5 ] [ 6 ]
Acceso remoto a la API
En el acceso remoto a API o el reenvío de API, las llamadas a las API gráficas de las aplicaciones invitadas se reenvían al host mediante una llamada a procedimiento remoto , y el host ejecuta los comandos gráficos de múltiples invitados utilizando la GPU del host como un solo usuario. [ 1 ] Puede considerarse una forma de paravirtualización cuando se combina con la emulación de dispositivos. [ 7 ] Esta técnica permite compartir recursos de GPU entre múltiples invitados y el host cuando la GPU no admite la virtualización asistida por hardware. Es conceptualmente simple de implementar, pero tiene varias desventajas: [ 1 ]
- En el acceso remoto a API puro, existe poco aislamiento entre máquinas virtuales al acceder a las API gráficas; el aislamiento se puede mejorar utilizando la paravirtualización.
- El rendimiento varía desde el 86% hasta tan solo el 12% del rendimiento nativo en aplicaciones que realizan un gran número de llamadas de dibujo por fotograma.
- Es necesario reenviar un gran número de puntos de entrada de la API, y la implementación parcial de los puntos de entrada puede disminuir la fidelidad.
- Las aplicaciones en máquinas virtuales pueden estar limitadas a unas pocas API disponibles.
Los hipervisores suelen usar memoria compartida entre el sistema invitado y el anfitrión para maximizar el rendimiento y minimizar la latencia. En cambio, al usar una interfaz de red (un enfoque común en la renderización distribuida ), el software de terceros puede agregar soporte para API específicas (por ejemplo, rCUDA [ 8 ] para CUDA ) o agregar soporte para API típicas (por ejemplo, VMGL [ 9 ] para OpenGL ) cuando el paquete de software del hipervisor no lo admite, aunque el retardo de red y la sobrecarga de serialización pueden superar los beneficios.
Paso fijo
En el modo de paso directo fijo o paso directo de GPU (un caso especial del paso directo de PCI ), una única máquina virtual accede a la GPU de forma directa, exclusiva y permanente. Esta técnica alcanza entre el 96 % y el 100 % del rendimiento nativo [ 3 ] y una alta fidelidad [ 1 ] , pero la aceleración que proporciona la GPU no se puede compartir entre varias máquinas virtuales. Por lo tanto, tiene la menor tasa de consolidación y el mayor coste, ya que cada máquina virtual con aceleración gráfica requiere una GPU física adicional [ 1 ] .
Las siguientes tecnologías de software implementan el paso directo fijo:
- VMware Virtual Dedicated Graphics Acceleration (vDGA) [ 10 ] [ a ]
- Parallels Workstation Extreme [ 26 ]
- Asignación de dispositivos discretos (DDA) de Hyper-V [ 27 ]
- Transferencia de GPU de Citrix XenServer [ 28 ] [ 29 ]
- Xen [ 30 ] y QEMU / KVM [ 30 ] [ 31 ] con Intel GVT-d [ 32 ] [ 33 ] [ 31 ]
VirtualBox eliminó la compatibilidad con el paso directo de PCI en la versión 6.1.0. [ 34 ]
QEMU/KVM
Para ciertos modelos de GPU, los controladores de tarjetas de video de Nvidia y AMD intentan detectar que la GPU está siendo accedida por una máquina virtual y deshabilitar algunas o todas las funciones de la GPU. [ 35 ] NVIDIA ha cambiado recientemente las reglas de virtualización para GPU de consumo al deshabilitar la verificación en el controlador GeForce Game Ready 465.xx y posteriores. [ 36 ] Para NVIDIA, varias arquitecturas de GPU de consumo de escritorio y portátiles se pueden transferir de varias maneras. Para tarjetas gráficas de escritorio, la transferencia se puede hacer a través de KVM usando la configuración de BIOS heredada o UEFI a través de SeaBIOS y OVMF, respectivamente.
NVIDIA
Escritorios
Para ordenadores de sobremesa, la mayoría de las tarjetas gráficas se pueden transferir, aunque para tarjetas gráficas con arquitectura Pascal o anterior, la VBIOS de la tarjeta gráfica debe transferirse en la máquina virtual si la GPU se utiliza para arrancar el host. [ 37 ]
portátiles
En los portátiles, el controlador NVIDIA comprueba la presencia de una batería mediante ACPI, y si no hay batería, se devuelve un error. Para evitar esto, se requiere un acpitable creado a partir de texto convertido a Base64 para simular una batería y eludir la comprobación. [ 37 ]
Pascal y anteriores
Para las tarjetas gráficas de portátiles Pascal y anteriores, la función de transferencia directa (passthrough) varía considerablemente según la configuración de la tarjeta gráfica. En portátiles sin NVIDIA Optimus, como las variantes MXM, la transferencia directa se puede lograr mediante métodos tradicionales. En portátiles con NVIDIA Optimus activado y que renderizan a través del framebuffer gráfico integrado de la CPU en lugar del suyo propio, la transferencia directa es más compleja, ya que requiere una pantalla o servicio de renderizado remoto, el uso de Intel GVT-g, así como la integración de la VBIOS en la configuración de arranque, dado que la VBIOS se encuentra en la BIOS del sistema del portátil y no en la propia GPU.
Para portátiles con GPU NVIDIA Optimus y búfer de fotogramas dedicado, las configuraciones pueden variar. Si se puede desactivar NVIDIA Optimus, es posible realizar el passthrough mediante métodos tradicionales. Sin embargo, si Optimus es la única configuración, lo más probable es que la VBIOS esté presente en la BIOS del sistema del portátil, requiriendo los mismos pasos que si el portátil renderizara únicamente en el búfer de fotogramas de gráficos integrados, aunque también es posible usar un monitor externo. [ 38 ]
Paso mediado
En la virtualización de GPU completa o de paso de dispositivo mediado, el hardware de la GPU proporciona contextos con rangos de memoria virtual para cada invitado a través de IOMMU y el hipervisor envía comandos gráficos de los invitados directamente a la GPU. Esta técnica es una forma de virtualización asistida por hardware y logra un rendimiento casi nativo [ b ] y alta fidelidad. Si el hardware expone los contextos como dispositivos lógicos completos, los invitados pueden usar cualquier API. De lo contrario, las API y los controladores deben gestionar la complejidad adicional de los contextos de la GPU. Como desventaja, puede haber poco aislamiento entre las máquinas virtuales al acceder a los recursos de la GPU. [ 1 ]
Las siguientes tecnologías de software y hardware implementan el paso a través mediado:
- Aceleración gráfica de paso directo compartido virtual de VMware [ a ] con Nvidia vGPU [ 42 ] o AMD MxGPU [ 43 ]
- Citrix XenServer compartió GPU con Nvidia vGPU, AMD MxGPU o Intel GVT-g [ 28 ] [ 29 ]
- Xen [ 44 ] [ 45 ] [ 31 ] y KVM [ 46 ] [ 45 ] con Intel GVT-g [ 32 ] [ 33 ]
- Estación de trabajo Thincast: función 3D virtual (DirectX 12 y API Vulkan 3D)
Si bien la comunicación remota mediante API está generalmente disponible para las GPU actuales y antiguas, el paso directo mediado requiere compatibilidad de hardware disponible solo en dispositivos específicos.
Emulación de dispositivos
Las arquitecturas de GPU son muy complejas y cambian rápidamente, y sus detalles internos a menudo se mantienen en secreto. Generalmente no es factible virtualizar completamente las nuevas generaciones de GPU, solo las generaciones más antiguas y simples. Por ejemplo, PCem , un emulador especializado de la arquitectura IBM PC , puede emular un dispositivo gráfico S3 ViRGE /DX, que admite Direct3D 3, y un 3dfx Voodoo2 , que admite Glide , entre otros. [ 49 ] Al usar un adaptador de pantalla virtual VGA o SVGA , [ 50 ] [ 51 ] [ 52 ] el invitado puede no tener aceleración de gráficos 3D, proporcionando solo una funcionalidad mínima para permitir el acceso a la máquina a través de una terminal gráfica. El dispositivo emulado puede exponer solo modos gráficos 2D básicos a los invitados. El administrador de la máquina virtual también puede proporcionar implementaciones de API comunes que utilizan renderizado por software para habilitar aplicaciones de gráficos 3D en el invitado, aunque a velocidades que pueden ser tan bajas como el 3 % del rendimiento nativo acelerado por hardware. [ 1 ] [ 53 ]
Las siguientes tecnologías de software implementan API gráficas mediante renderizado por software:
- Renderizador de software 3D VMware SVGA [ 54 ]
- Controlador gráfico VirtualBox VMSVGA [ 51 ]
- Acelerador de software OpenGL de Citrix XenServer [ 55 ]
- Plataforma de rasterización avanzada de Windows
- Renderizador de software OpenGL principal
- Renderizador de software Mesa
- Renderizador de software Swift Shader (implementa WebGPU )
Véase también
Notas
Referencias
- 1 2 3 4 5 6 7 8 Dowty, Micah; Sugerman, Jeremy (julio de 2009). Escrito en San Diego . "Virtualización de GPU en la arquitectura de E/S alojada de VMware" (PDF) . ACM SIGOPS Operating Systems Review . 43 (3). Ciudad de Nueva York : Association for Computing Machinery : 73–82 . doi : 10.1145/1618525.1618534 . ISSN 0163-5980 . S2CID 228328. Recuperado el 10 de septiembre de 2020 .
- ↑ Hong, Hua-Jun; Fan-Chiang, Tao-Ya; Lee, Che-Rung; Chen, Kuan-Ta; Huang, Chun-Ying; Hsu, Cheng-Hsin (2014). Consolidación de GPU para juegos en la nube: ¿Hemos llegado ya? 13.º Taller anual sobre soporte de redes y sistemas para juegos. Nagoya : Instituto de Ingenieros Eléctricos y Electrónicos . pp. 1–6 . doi : 10.1109/NetGames.2014.7008969 . ISBN 978-1-4799-6882-4ISSN 2156-8138 . S2CID 664129. Consultado el 14 de septiembre de 2020 .
- 1 2 Walters, John; Younge, Andrew; Kang, Dong-In; Yao, Ke-Thia; Kang, Mikyung; Crago, Stephen; Fox, Geoffrey (2014). "Rendimiento de la transferencia de GPU: una comparación de KVM, Xen, VMware ESXi y LXC para aplicaciones CUDA y OpenCL". 7.ª Conferencia Internacional IEEE sobre Computación en la Nube . Anchorage : IEEE Computer Society . págs. 636–643 . doi : 10.1109/CLOUD.2014.90 . ISBN 978-1-4799-5063-8ISSN 2159-6190
- ↑ Yu, Hangchen; Rossbach, Christopher (25 de junio de 2017). Virtualización completa para GPU reconsiderada (PDF) . ISCA -44 14.º Taller anual sobre duplicación, deconstrucción y desmitificación. Toronto . Recuperado el 12 de septiembre de 2020 .
- ↑ Tian, Kun; Dong, Yaozu; Cowperthwaite, David (junio de 2014). "Una solución completa de virtualización de GPU con paso directo mediado" (PDF) . Actas de la Conferencia Técnica Anual de USENIX de 2014 (USENIX ATC'14) . Conferencia Técnica Anual de USENIX . Filadelfia : USENIX . págs. 121–132 . ISBN 978-1-931971-10-2.
- ↑ Gottschlag, Mathias; Hillenbrand, Marius; Kehne, Jens; Stoess, Jan; Bellosa, Frank (noviembre de 2013). LoGV: Virtualización GPGPU de baja sobrecarga (PDF) . 10.ª Conferencia Internacional sobre Computación de Alto Rendimiento . Zhangjiajie : IEEE Computer Society . págs. 1721–1726 . doi : 10.1109/HPCC.and.EUC.2013.245 . ISBN 978-0-7695-5088-6Consultado el 16 de septiembre de 2020 .
- ↑ Suzuki, Yusuke; Kato, Shinpei; Yamada, Hiroshi; Kono, Kenji (junio de 2014). "GPUvm: ¿Por qué no virtualizar las GPU en el hipervisor?" (PDF) . Actas de la Conferencia Técnica Anual de USENIX de 2014 (USENIX ATC'14) . Conferencia Técnica Anual de USENIX . Filadelfia : USENIX . págs. 109-120 . ISBN 978-1-931971-10-2Consultado el 14 de septiembre de 2020 .
- ↑ Duato, José; Peña, Antonio; Silla, Federico; Fernández, Juan; Mayo, Rafael; Quintana-Ortí, Enrique (diciembre de 2011). Habilitación de la aceleración CUDA dentro de máquinas virtuales usando rCUDA (PDF) . XVIII Congreso Internacional sobre Computación de Alto Rendimiento . Bangalore : Sociedad de Computación IEEE . págs. 1 a 10. doi : 10.1109/HiPC.2011.6152718 . hdl : 2117/168226 . ISBN 978-1-4577-1951-6ISSN 1094-7256 . Consultado el 13 de septiembre de 2020 .
- ↑ Lagar-Cavilla, Horacio; Tolia, Niraj; Satyanarayanan, Mahadev; Lara, Eyal (junio de 2007). "Aceleración gráfica independiente de VMM" (PDF) . Escrito en San Antonio . Actas de la 3.ª Conferencia Internacional sobre Entornos de Ejecución Virtual . VEE '07. Ciudad de Nueva York : Association for Computing Machinery . págs. 33-43 . doi : 10.1145/1254810.1254816 . ISBN 978-1-59593-630-1. Consultado el 12 de septiembre de 2020 .
- 1 2 Lantinga, Hilko. Implementación de gráficos acelerados por hardware con VMware Horizon (Guía). VMware . Consultado el 12 de septiembre de 2020 .
- ↑ "Notas de la versión de VMware Workstation 16 Pro" . docs.vmware.com . Consultado el 24 de marzo de 2021 .
- ↑ "El controlador SVGA Gallium3D de VMware incorpora soporte para OpenGL 4.3 en Mesa 22.0" .
- ↑ "Configuración de gráficos" . Parallels Desktop - Guía del usuario (Guía). Parallels . Consultado el 26 de mayo de 2026 .
- ↑ Bright, Peter (11 de marzo de 2014). "Valve lanza un traductor de código abierto de Direct3D a OpenGL" . Ars Technica . Recuperado el 15 de septiembre de 2020 .
- ↑ "Implementar dispositivos gráficos mediante RemoteFX vGPU" . Hyper-V en Windows Server (Manual). Microsoft . Consultado el 13 de septiembre de 2020 .
- ↑ "Plan para la aceleración de GPU en Windows Server" . Hyper-V en Windows Server (Manual). Microsoft . Consultado el 15 de septiembre de 2020 .
- ↑ "Gráficos acelerados por hardware" . Manual de usuario de Oracle VM VirtualBox (Manual). Oracle Corporation . Consultado el 12 de septiembre de 2012 .
- ↑ "Complementos para invitados" . Manual de usuario de Oracle VM VirtualBox (Manual). Oracle Corporation . Consultado el 12 de septiembre de 2020 .
- ↑ Larabel, Michael (19 de diciembre de 2018). "Rendimiento de VirtualBox 6.0 3D/OpenGL con adaptador VMSVGA" . Phoronix . Consultado el 15 de septiembre de 2020 .
- ↑ Larabel, Michael (29 de enero de 2009). "VirtualBox obtiene soporte acelerado para Direct3D" . Phoronix . Recuperado el 15 de septiembre de 2020 .
- ↑ "¡Hola! - La estación de trabajo Thincast" . www.freerdp.com . Consultado el 26 de mayo de 2026 .
- ↑ "Proyecto Virgil 3D GPU" . GitHub (Proyecto). freedesktop.org . Consultado el 13 de septiembre de 2020 .
- ↑ Edge, Jake (10 de septiembre de 2014). Virgil 3D: Una GPU virtual (Artículo). LWN.net . Recuperado el 13 de septiembre de 2020 .
- ↑ Wollny, Gert (28 de agosto de 2019). "Virglrenderer y el estado de los mundos virtuales virtualizados" . Collabora News & Blog . Recuperado el 15 de septiembre de 2020 .
- ↑ Hoffmann, Gerd (28 de noviembre de 2019). "Estado y planes de la GPU de virtio" . Recuperado el 15 de septiembre de 2020 .
- ↑ Desarrollo de GPU con Parallels Workstation Extreme (PDF) (Documento técnico). Parallels . 2010. Consultado el 13 de septiembre de 2020 .
- ↑ "Implementar dispositivos gráficos mediante la asignación de dispositivos discretos" . Hyper-V en Windows Server (Manual). Microsoft . Consultado el 13 de septiembre de 2020 .
- 1 2 "HDX 3D Pro" . XenApp y XenDesktop 7.15 LTSR (Manual). Citrix Systems . Consultado el 15 de septiembre de 2020 .
- 1 2 "Descripción general de los gráficos" . Citrix Hypervisor 8.2 (Manual). Citrix Systems . Consultado el 15 de septiembre de 2020 .
- 1 2 Guía de configuración de GVT-d . GitHub (Guía) . Consultado el 13 de septiembre de 2020 .
- 1 2 3 Larabel, Michael (4 de mayo de 2014). "Intel impulsa sus capacidades de virtualización de gráficos" . Phoronix . Recuperado el 13 de septiembre de 2020 .
- 1 2 "Llevando nuevos casos de uso y cargas de trabajo a la nube con la tecnología de virtualización de gráficos de Intel (Intel GVT-g)" (PDF) . Centro de tecnología de código abierto de Intel (folleto). Intel . 2016. Recuperado el 14 de agosto de 2020 .
- 1 2 Jain, Sunil (4 de mayo de 2014). "Actualización de virtualización de gráficos Intel" (Artículo). Intel . Recuperado el 13 de septiembre de 2020 .
- ↑ "Registro de cambios para VirtualBox 6.1" . VirtualBox . Oracle Corporation . 10 de diciembre de 2019. Consultado el 12 de septiembre de 2020 .
- ↑ "PCI passthrough via OVMF - Detección de virtualización del controlador de la tarjeta de vídeo" . Arch Linux Wiki (Wiki) . Consultado el 26 de mayo de 2026 .
- ↑ "GeForce GPU Passthrough para Windows Virtual Machine (Beta)" . Soporte de NVIDIA . 30 de marzo de 2021. Consultado el 26 de mayo de 2026 .
- 1 2 "PCI passthrough via OVMF - ArchWiki" . wiki.archlinux.org . Consultado el 20 de mayo de 2021 .
- ↑ Tian, Lan (2020-06-25). "Paso de GPU Intel y NVIDIA en una computadora portátil Optimus sin MUX" .
- ↑ Zheng, Xiao (agosto de 2015). Nube multimedia basada en la tecnología de virtualización de gráficos Intel (Intel GVT-g) y OpenStack (PDF) . Foro de desarrolladores de Intel (diapositiva de presentación). San Francisco : Intel . Consultado el 14 de septiembre de 2020 .
- ↑ Wang, Zhenyu (septiembre de 2017). Virtualización completa de GPU mediante paso directo (PDF) . XDC2017 (Diapositiva de presentación). Mountain View, California : Fundación X.Org . Recuperado el 14 de septiembre de 2020 .
- ↑ Kurkure, Uday (12 de octubre de 2017). Comparación del rendimiento de la GPU nativa con la GPU virtualizada y la escalabilidad de las GPU virtualizadas para el aprendizaje automático . Blog de rendimiento de VMware VROOM! (Artículo). VMware . Episodio 3. Consultado el 14 de septiembre de 2020 .
- ↑ Guía del usuario del software de GPU virtual (Guía). Nvidia . Consultado el 13 de septiembre de 2020 .
- 1 2 Wong, Tonny (28 de enero de 2016). AMD GPU multiusuario: virtualización de GPU habilitada por hardware para una verdadera experiencia de estación de trabajo (PDF) (Documento técnico). AMD . Recuperado el 12 de septiembre de 2020 .
- ↑ Wang, Hongbo (18 de octubre de 2018). "Lanzamiento de XenGT (Intel GVT-g para Xen) en el tercer trimestre de 2018" (Comunicado de prensa). Centro de Tecnología de Código Abierto de Intel . Consultado el 14 de agosto de 2020 .
- 1 2 Guía de configuración de GVT-g . GitHub (Guía) . Consultado el 13 de septiembre de 2020 .
- ↑ Wang, Hongbo (18 de octubre de 2018). "Lanzamiento de KVMGT (Intel GVT-g para KVM) en el tercer trimestre de 2018" (Comunicado de prensa). Centro de Tecnología de Código Abierto de Intel . Consultado el 14 de agosto de 2020 .
- ↑ "GPU compatibles con el software NVIDIA Virtual GPU" . NVIDIA . Consultado el 9 de septiembre de 2020 .
- ↑ AMD FirePro Serie S para virtualización (PDF) (Hoja de datos). AMD . 2016. Consultado el 13 de septiembre de 2020 .
- ↑ "Sistemas/placas base emulados" . PCem (Proyecto) . Consultado el 26 de octubre de 2020 .
- ↑ "Controladores de dispositivos de VMware Tools" . Documentación de VMware Tools (Manual). VMware . Consultado el 12 de septiembre de 2020 .
- 1 2 "Configuración de máquinas virtuales" . Manual de usuario de Oracle VM VirtualBox (Manual). Oracle Corporation . Consultado el 12 de septiembre de 2020 .
- ↑ "Opciones de visualización". Documentación del usuario de QEMU . QEMU (Manual) . Consultado el 12 de septiembre de 2020 .
- ↑ "GPU Cloud" . fptcloud.com . Consultado el 26 de mayo de 2026 .
- ↑ Long, Simon (2013). Guía de implementación de aceleración de gráficos de máquinas virtuales (PDF) (Documento técnico). VMware . Consultado el 14 de septiembre de 2020 .
- ↑ "Acelerador de software OpenGL" . XenApp y XenDesktop 7.15 LTSR (Manual). Citrix Systems . Consultado el 15 de septiembre de 2020 .
- Virtualización de hardware