virtio-nvgpu — module pour fournir accès au GPU NVIDIA depuis des machines virtuelles KVM

Le projet virtio-nvgpu développe un dispositif virtio permettant d'accéder aux GPU NVIDIA depuis des systèmes invités fonctionnant sous l'hyperviseur KVM, avec une perte de performance minime. Il comprend un module noyau chargé dans le système invité et un dispositif virtio exécuté du côté de l'environnement hôte. Le code du module noyau est écrit en C et distribué sous la licence GPLv2, tandis que le code du dispositif virtio est écrit en Rust et distribué sous la licence Apache 2.0.

Selon les développeurs, la perte de performance lors de l'accès au GPU ne dépasse pas 2 %. Une grande rapidité est atteinte grâce au redirectionnement des appels ioctl vers le pilote natif NVIDIA et au fonctionnement au niveau de l'ABI du pilote NVIDIA, sans conversion des requêtes au niveau de l'API. Du côté du système invité, des bibliothèques standard et des pilotes haut niveau NVIDIA, fonctionnant en espace utilisateur, sont utilisés.

Dans le système invité, un module noyau est chargé, fournissant les fichiers de périphériques /dev/nvidiactl, /dev/nvidia0…N, /dev/nvidia-uvm et transmettant les appels ioctl() et mmap() via un virtqueue au gestionnaire côté environnement hôte, qui les transmet au pilote NVIDIA de l'hôte. Pour éviter les changements de contexte entre le système hôte et la machine virtuelle, les tampons de commandes sont reflétés (mmap) dans une mémoire partagée accessible à l'environnement hôte et au GPU.

Contrairement à un accès exclusif au GPU (VFIO Passthrough), le projet virtio-nvgpu permet un accès partagé à un seul GPU depuis plusieurs machines virtuelles, et contrairement à virtio-gpu (Venus, VirGL), il fonctionne par le biais d'une conversion de l'ABI vers le pilote NVIDIA, et non au niveau de la conversion des API graphiques Vulkan et OpenGL. Les inconvénients de virtio-nvgpu incluent l'absence d'une isolation complète basée sur l'IOMMU (les systèmes invités fonctionnent via le pilote hôte NVIDIA et sont seulement limités à la filtration des appels ioctl) et la dépendance à l'ABI des pilotes NVIDIA (l'ABI change à chaque version et nécessite une adaptation de virtio-nvgpu).

Les capacités de virtio-nvgpu sont suffisantes pour le rendu, l'encodage vidéo et le calcul via les API Vulkan, OpenGL, NVENC et CUDA. Le principal domaine d'application mentionné est la création de services de jeux cloud ou de postes de travail virtuels, dans lesquels un jeu ou une application graphique est lancé dans une machine virtuelle, dans laquelle le rendu est effectué, le codage matériel du résultat est réalisé via NVENC et la sortie est envoyée à l'utilisateur distant sous forme de flux vidéo compressé.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster