Linux kullanıcıları artık NVIDIA GPU’larının kullanılmayan VRAM belleğini, sistem takas (swap) alanı olarak kullanabiliyor. Açık kaynak kodlu nbd-vram projesi, özellikle lehimli belleğe sahip ve yükseltme yapılamayan hibrit grafikli dizüstü bilgisayarlar için geliştirilmiş devrim niteliğinde bir çözüm sunuyor.
VRAM’i Swap Alanına Dönüştüren Proje
GitHub’da c0deJedi kullanıcısı tarafından geliştirilen nbd-vram, NVIDIA GPU’ların CUDA yeteneklerini kullanarak VRAM’i yüksek öncelikli bir swap cihazına dönüştürüyor. Proje, özellikle AMD/ATI entegre grafik biriminin ekran çıkışını yönettiği, NVIDIA kartın ise çoğu zaman boşta beklediği hibrit grafik dizüstü bilgisayarları hedefliyor.
Testler, RTX 3070 Laptop GPU (8 GB VRAM) ve 16 GB sistem RAM’ine sahip bir dizüstü bilgisayarda gerçekleştirildi. nbd-vram ile 7 GB VRAM swap olarak ayrıldığında, zram ve SSD swap ile birlikte toplam kullanılabilir bellek miktarı 46 GB’a ulaştı. Bu, orijinal kapasitenin neredeyse üç katına çıkması anlamına geliyor.
Nasıl Çalışıyor?
nbd-vram, NBD (Network Block Device) protokolünü kullanarak çalışıyor. Küçük bir arka plan hizmeti (daemon), CUDA sürücü API’si aracılığıyla VRAM tahsis ediyor ve ardından bu belleği bir Unix soketi üzerinden NBD blok cihazı olarak sunuyor. Linux çekirdeğinin yerleşik nbd sürücüsü bu cihaza bağlanarak /dev/nbdX olarak kullanıma açıyor. Ardından bu, normal bir swap cihazı gibi işlev görüyor.
Veri yolu şu şekilde işliyor: çekirdek takas alt sistemi → /dev/nbdX → nbd çekirdek sürücüsü → Unix soketi → nbd-vram daemon → cuMemcpyHtoD/DtoH → GPU VRAM. Bu yaklaşım, herhangi bir özel çekirdek modülü yazma veya NVIDIA çekirdek sembollerine erişim gerektirmiyor. Sürücü ve çekirdek güncellemeleri sırasında yeniden derleme yapılmasına da gerek kalmıyor.
Diğer Yaklaşımlar Neden Çalışmadı?
Geliştirici, VRAM’i swap olarak kullanmak için daha önce denenmiş iki farklı yaklaşımın neden başarısız olduğunu da açıklıyor. nvidia_p2p_get_pages_persistent API’si, tüketici sınıfı GeForce GPU’larda NVIDIA sürücüsü tarafından EINVAL hatasıyla reddediliyor. Bu API, yalnızca Quadro ve veri merkezi sınıfı GPU’lar için kullanılabiliyor.
Diğer bir yöntem olan BAR1 fiziksel adresine doğrudan ioremap_wc ile erişme girişimi de başarısız oluyor. GPU’nun dahili sayfa tablolarında yalnızca yaklaşık 16 MiB’lik BAR1 alanı (ekran çerçeve tamponu) eşlenmiş durumda. Geri kalan bölgelere yapılan okumalar sıfır döndürüyor.
NBD yaklaşımı tüm bu engelleri aşıyor. cuMemcpyHtoD ve cuMemcpyDtoH işlevleri, herhangi bir CUDA destekli GPU’da özel izin gerektirmeden çalışabiliyor.
Kurulum ve Kullanım
Projenin kurulumu oldukça basit. Tek gereksinimler: CUDA destekli bir NVIDIA GPU (herhangi bir tüketici RTX/GTX kartı), NVIDIA sürücüsü (CUDA toolkit gerekmiyor), Linux çekirdeği 3.0 ve üzeri (nbd modülü), nbd-client paketi, gcc ve make.
Kurulum için depoyu klonlayıp sudo ./install.sh komutunu çalıştırmak yeterli. Yükleme sonrası hizmet otomatik olarak başlatılıyor ve her açılışta çalışıyor. Kullanıcılar, /etc/systemd/system/vram-swap-nbd.service dosyasından VRAM miktarını ve swap önceliğini yapılandırabiliyor.
Güç Yönetimi Desteği
İlk kurulum sırasında kullanıcıya güç yönetimi seçeneği sunuluyor. Etkinleştirildiğinde, hizmet AC güç kaynağından çıkarıldığında veya pil belirli bir eşiğin altına düştüğünde otomatik olarak duruyor ve güç geri geldiğinde yeniden başlıyor. Manuel systemctl stop komutu her zaman öncelikli ve geçersiz kılınamıyor.
nbd-vram, özellikle lehimli RAM’e sahip ve bellek yükseltmesi yapılamayan modern ultrabook ve oyun dizüstü bilgisayarları için pratik bir çözüm sunuyor. Proje GitHub üzerinde MIT lisansıyla yayınlanmış durumda.