Proyek virtio-nvgpu mengembangkan perangkat virtio yang memungkinkan akses ke GPU NVIDIA dari sistem tamu yang berjalan di bawah hypervisor KVM dengan dampak kinerja minimal. Proyek ini terdiri dari modul kernel yang dimuat di sistem tamu dan perangkat virtio yang berjalan di host. Kode modul kernel ditulis dalam bahasa C dan dilisensikan di bawah GPLv2, sedangkan kode perangkat virtio ditulis dalam bahasa Rust dan dilisensikan di bawah lisensi Apache 2.0.
Menurut pengembang, penurunan performa saat mengakses GPU tidak melebihi 2%. Performa tinggi dicapai dengan mengarahkan panggilan ioctl ke driver NVIDIA asli dan beroperasi pada level ABI driver NVIDIA, tanpa menerjemahkan permintaan pada level API. Di sisi guest, digunakan pustaka asli dan driver NVIDIA tingkat tinggi yang berjalan di ruang pengguna.
Modul kernel dimuat di sistem tamu. Modul ini menyediakan file perangkat /dev/nvidiactl, /dev/nvidia0…N, dan /dev/nvidia-uvm serta mengarahkan panggilan ioctl() dan mmap() melalui virtqueue ke handler di lingkungan host, yang kemudian meneruskannya ke driver host NVIDIA. Untuk menghindari peralihan konteks antara sistem host dan mesin virtual, buffer perintah dipetakan (mmapped) ke memori bersama yang dapat diakses oleh lingkungan host dan GPU.
Berbeda dengan passthrough akses GPU eksklusif (VFIO Passthrough), proyek virtio-nvgpu menyediakan akses bersama ke satu GPU dari beberapa GPU. mesin virtualSelain itu, tidak seperti virtio-gpu (Venus, VirGL), ia bekerja melalui penerusan ABI ke driver NVIDIA, bukan pada tingkat terjemahan API grafis Vulkan dan OpenGL. Kekurangan virtio-nvgpu meliputi kurangnya isolasi berbasis IOMMU penuh (sistem tamu beroperasi melalui driver host NVIDIA dan terbatas pada penyaringan panggilan ioctl) dan ketergantungannya pada ABI driver NVIDIA (ABI berubah dengan setiap versi, sehingga memerlukan adaptasi virtio-nvgpu).
Kemampuan virtio-nvgpu cukup untuk rendering, encoding video, dan komputasi menggunakan API Vulkan, OpenGL, NVENC, dan CUDA. Aplikasi utama yang disebutkan adalah pembuatan layanan cloud gaming atau desktop virtual tempat game atau aplikasi grafis berjalan di dalamnya. mesin virtualyang melakukan rendering, pengkodean perangkat keras dari hasilnya menggunakan NVENC, dan transmisi output ke pengguna jarak jauh dalam bentuk aliran video terkompresi.
Sumber: opennet.ru
