
virtio-nvgpu, KVM konuklarına NVIDIA GPU'ya neredeyse yerel erişim sağlıyor
Nestri ekibi deneysel virtio-nvgpu aygıtını yayımladı. Aygıt NVIDIA sürücü ioctl'lerini ABI düzeyinde iletiyor; RTX 3060 ölçümlerinde konuk, 2 ms'den ağır karelerde sanallaştırmasız sistemin %2'si içinde kalıyor.
Nestri ekibi, açık kaynak bulut oyun altyapısı nesbox'ın arkasındaki isim, deneysel virtio-nvgpu aygıtını yayımladı. Cihaz, KVM altındaki bir Linux konuğuna NVIDIA ekran kartına neredeyse yerel erişim sağlıyor. Modül grafik API çağrılarını çevirmek yerine NVIDIA çekirdek sürücü ioctl'lerini konuk ile ana makine arasında driver ABI düzeyinde iletiyor; böylece konukta NVIDIA'nın kendi sürücüleri değiştirilmeden çalışıyor ve aynı Vulkan ile NVENC aynı karta sesleniyor.
Projenin hedefi ekransız yayın: sanal makine içindeki kompozitör kareleri GPU'da çiziyor, birleştiriyor ve kodluyor, dışarı yalnızca sıkıştırılmış video çıkıyor. Sanal makinede monitör yok ve kart ana makinede kalıyor.
Sürücüyü iletmek, API'yi değil
Konuktaki çekirdek modülü /dev/nvidiactl, /dev/nvidia0...N ve /dev/nvidia-uvm aygıtlarını kaydediyor. Her ioctl bir virtqueue'ya yazılıyor, VMM içindeki ABI'yi bilen bileşen bunu ana makinenin aygıt dosyalarına karşı çevirip çalıştırıyor, mmap çağrıları ise paylaşılan bir bellek penceresini eşliyor. Ters yöndeki ikinci kuyruk, GPU'nun hazır olduğunu konuğa bildiriyor; döngüde beklemek yerine uyumayı sağlayan da bu.
Konuktaki kullanıcı alanı sürücüsü GPU komut tamponlarını yerel olarak oluşturduğu için tek tek draw call'lar sanallaştırma sınırını hiç geçmiyor: tam bir turda konuk 813.691 kare çizdi, arka uç ise 13.792 mesaj işledi, yani 59 karede bir geçiş.
Rakamlar
Ölçümler 595.99.02 sürücülü bir RTX 3060'ta yapıldı: ana makinede Ubuntu 26.04 ve Ryzen 7 9850X3D, konukta 2 vCPU ve Linux 7.2. Karesi yaklaşık 2 ms'den ağır işlerde fark, aynı makinenin sanallaştırmasız hâline göre %2 içinde kalıyor: 39 ms'lik kare konukta %0,4 daha hızlı, 2 ms'lik ise %1,7 daha yavaş çıktı. Çok hafif kareler daha çok kaybediyor (0,5 ms'de %7,1), çünkü uyanma yaklaşık 0,02 ms'ye mal oluyor.
CPU maliyeti sanallaştırmasız sistemle aynı: aynı 12 saniyelik akışta konuk 0,37 saniye, ana makine 0,40 saniye harcadı. Dört konuk tek kartı eşit paylaşıyor: birlikte 103,7 fps, tek konuk ise 102,9 fps, ve dördü aynı anda sabit 60 Hz'de H.264 kodluyor.
Henüz olmayanlar
Yazarlar güvenlik yüzeyini açıkça anlatıyor: konuğun GPU işi ile ana makine arasında bir IOMMU sınırı yok, kart ana makinenin sürücü alanında kalıyor, dolayısıyla NVIDIA sürücüsü güvenilen hesaplama tabanının parçası. ABI profilinde tanımlı olmayan ioctl'ler iletilmek yerine reddediliyor; README bunu donanım yalıtımı değil saldırı yüzeyinin daraltılması olarak adlandırıyor. Birbirine güvenmeyen kiracılar için VFIO ya da vGPU hâlâ daha güçlü çözüm.
Her konuk süreci için tasarlanan korumalı yardımcı (isolate) yalnızca tasarım aşamasında; CUDA iletiliyor ama yalnızca cihaz sayımına kadar denendi; MIG ve SR-IOV kapsam dışı. Sürücü desteği açık: üç ABI profili (535.129.03, 580.178.04 ve 595.71.05). Depo yapısı gVisor nvproxy ile chromeos/virtio-media'yı izliyor.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.