Virtio-nvgpu loyihasi KVM gipervizori ostida ishlaydigan mehmon tizimlaridan NVIDIA GPUlariga minimal ishlash ta'siri bilan kirish imkonini beruvchi virtio qurilmasini ishlab chiqadi. U mehmon tizimiga yuklangan yadro moduli va xostda ishlaydigan virtio qurilmasidan iborat. Yadro moduli kodi C tilida yozilgan va GPLv2 litsenziyasi ostida, virtio qurilma kodi esa Rust tilida yozilgan va Apache 2.0 litsenziyasi ostida litsenziyalangan.
Ishlab chiquvchilarning fikriga ko'ra, GPUga kirishda unumdorlikning yo'qolishi 2% dan oshmaydi. Yuqori unumdorlikka ioctl chaqiruvlarini NVIDIA ning mahalliy drayveriga yo'naltirish va API darajasida so'rovlarni tarjima qilmasdan NVIDIA drayveri ABI darajasida ishlash orqali erishiladi. Mehmon tomonida mahalliy kutubxonalar va foydalanuvchi maydonida ishlaydigan yuqori darajadagi NVIDIA drayverlaridan foydalaniladi.
Mehmon tizimiga yadro moduli yuklangan. U /dev/nvidiactl, /dev/nvidia0…N va /dev/nvidia-uvm qurilma fayllarini taqdim etadi va ioctl() va mmap() chaqiruvlarini virtqueue orqali xost muhitidagi ishlov beruvchiga yo'naltiradi, bu esa ularni NVIDIA xost drayveriga uzatadi. Xost tizimi va virtual mashina o'rtasida kontekst almashinuvlarining oldini olish uchun buyruq buferlari xost muhiti va GPU tomonidan kirish mumkin bo'lgan umumiy xotiraga xaritalanadi (mmapped).
Eksklyuziv GPUga kirish passthrough (VFIO Passthrough) dan farqli o'laroq, virtio-nvgpu loyihasi bir nechta GPUlardan bitta GPUga umumiy kirishni ta'minlaydi virtual mashinalar, va virtio-gpu (Venus, VirGL) dan farqli o'laroq, u Vulkan va OpenGL grafik API tarjima darajasida emas, balki ABI orqali NVIDIA drayveriga o'tadi. Virtio-nvgpu ning kamchiliklari orasida to'liq IOMMU asosidagi izolyatsiyaning yo'qligi (mehmon tizimlari NVIDIA xost drayveri orqali ishlaydi va ioctl qo'ng'iroqlarini filtrlash bilan cheklangan) va uning NVIDIA drayveri ABI ga bog'liqligi (ABI har bir versiya bilan o'zgaradi, bu esa virtio-nvgpu ni moslashtirishni talab qiladi) kiradi.
Virtio-nvgpu imkoniyatlari Vulkan, OpenGL, NVENC va CUDA API'laridan foydalangan holda renderlash, video kodlash va hisoblash uchun yetarli. Asosiy tilga olingan dastur bulutli o'yin xizmatlari yoki o'yin yoki grafik ilova ishlaydigan virtual ish stollarini yaratishdir. virtual mashina, bu NVENC yordamida natijani renderlashni, apparat kodlashni va chiqishni masofaviy foydalanuvchiga siqilgan video oqimi shaklida uzatishni amalga oshiradi.
Manba: opennet.ru
