NBD-VRAM is gepubliceerd

Gepubliceerd open source project NBD-VRAM, dat het mogelijk maakt een deel van het videogeheugen van de NVIDIA GPU te gebruiken als swapruimte in Linux. Het project richt zich vooral op laptops met vastgelijmde RAM, waar RAM niet kan worden uitgebreid, maar waar een discrete NVIDIA RTX/GTX grafische kaart met ongebruikt VRAM aanwezig is. De code is geschreven in C en shell, en wordt verspreid onder een licentie MIT.

Het idee van NBD-VRAM is eenvoudig: als het systeem al begint te swappen naar de SSD, kan er een extra tussenlaag voor de SSD worden geplaatst — videogeheugen. De auteur geeft een voorbeeld met een laptop met RTX 3070 Laptop: van de 8 GB VRAM werd 7 GB toegewezen voor swap, en in totaal met RAM, zram en SSD-swap had het systeem ongeveer 46 GB adresseerbaar geheugen. De veronderstelde volgorde van vullen is als volgt: eerst wordt RAM gebruikt, daarna VRAM als snelle swap, vervolgens zram, en pas daarna de SSD.

Technisch voegt NBD-VRAM geen nieuwe kernel driver toe. Een kleine daemon wijst geheugen van de videokaart toe via CUDA Driver API, en geeft dit vervolgens aan de Linux-kernel door als een block device via NBD — Network Block Device — bovenop een Unix-socket. Na verbinding met de standaard nbd-client verschijnt "/dev/nbdX" in het systeem, dat kan worden gepartitioneerd als gewone swap via mkswap en ingeschakeld via swapon.

De auteur benadrukt dat deze aanpak is gekozen vanwege de beperkingen van consumenten NVIDIA grafische kaarten. Een meer directe route via de NVIDIA P2P API op GeForce, zegt hij, stuit op EINVAL, omdat de desbetreffende mogelijkheden feitelijk alleen beschikbaar zijn voor professionele en servermodellen. De optie voor directe toegang tot BAR1 werkte ook niet: alleen een klein gemapt gebied bleek beschikbaar, en lezen uit de rest gaf nullen terug. De NBD-aanpak omzeilt deze beperking, omdat het gebruik maakt van de standaard CUDA-kopieeropdrachten cuMemcpyHtoD en cuMemcpyDtoH.

Functionaliteiten

  • Gebruik van VRAM als gewone Linux-swap. Na het starten biedt de daemon videogeheugen aan als "/dev/nbd0" of een ander NBD-apparaat, dat voor de kernel eruitziet als een standaard block device.

  • Werken zonder een eigen kernelmodule. Het project vereist niet dat er een aparte kernelmodule wordt geschreven, samengesteld en onderhouden, maakt geen gebruik van interne symbolen van de NVIDIA-driver en moet kernel- en driverupdates overleven zonder opnieuw te hoeven bouwen.

  • Orientatie op consumenten NVIDIA GPU. De vereisten omvatten NVIDIA GPU's met CUDA-ondersteuning, waaronder consumenten RTX/GTX-kaarten, de officiĆ«le NVIDIA-driver met libcuda.so.1, de nbd-module in de Linux-kernel, nbd-client, gcc en make. CUDA Toolkit is hierbij niet nodig.

  • systemd-integratie. Installatie via install.sh voegt de service vram-swap-nbd toe, die kan worden gestart met systemctl; na installatie wordt de service ingeschakeld voor automatische opstart bij het opstarten.

  • Instellen van de grootte en prioriteit van swap. In de systemd-unit kan VRAM_SETUP_SIZE_MB worden ingesteld, dat wil zeggen de bovengrens van toegewezen VRAM, en VRAM_SWAP_PRIORITY, dat wil zeggen de prioriteit van het swap-apparaat. Hoe hoger de prioriteit, hoe eerder Linux deze swap-laag zal gebruiken.

  • Automatische vermindering van de gevraagde grootte. Als de vereiste hoeveelheid VRAM niet beschikbaar is, probeert de daemon de grootte in blokken van 512 MiB te verminderen om toch beschikbare ruimte te reserveren, bijvoorbeeld als een deel van het geheugen al in gebruik is door de compositor of de grafische sessie.

  • Testscenario's. In de repository is er test-nbd.sh voor een rooktest met schrijven/lezen van 1 MiB en test-fill.sh voor een stress-test van het volledige VRAM-volume.

  • Gedeclareerde prestaties van ongeveer 1,3 GB/s. Op de RTX 3070 Laptop meet de auteur sequentiĆ«le schrijfsnelheid van 7 GB in blokken van 4 MB rond de 1,3 GB/s.

Toepassing scenario's

Laptops met gesoldeerde RAM. Het belangrijkste scenario is moderne laptops waar 16 of 32 GB RAM niet meer voldoende is, maar niet kan worden uitgebreid. Als er in zo'n machine een discrete RTX-kaart aanwezig is, kan een deel van de VRAM worden gebruikt als extra swap-laag. Dit verandert VRAM niet in volledige RAM, maar kan het systeem redden van een plotselinge overstap naar langzamere SSD-swap of van OOM-killer bij piekbelasting.

Zware ontwikkelomgevingen. IDE's, browsers met tientallen tabbladen, Docker-containers, lokale databases, builds van grote projecten en testomgevingen kunnen gemakkelijk tijdelijke pieken in het geheugenverbruik veroorzaken. In dit scenario kan NBD-VRAM fungeren als een buffer: het versnelt de normale werking niet, maar verzacht het moment waarop de RAM opraakt.

Vermindering van de belasting op SSD-swap. Als swap op SSD vaak wordt gebruikt, is dit niet alleen langzamer, maar creƫert het ook onnodige schrijfopdrachten naar de schijf. VRAM-swap kan met een hogere prioriteit worden ingesteld, zodat bij RAM-overloop het systeem eerst pagina's naar het videogeheugen verplaatst en pas daarna naar de SSD gaat. Dit is vooral relevant voor laptops, waar de SSD vaak ook niet verwisselbaar of duur om te vervangen is.

Combinatie met zram. De auteur beschrijft letterlijk een schema waarin VRAM swap een hogere prioriteit krijgt en als eerste de "overloop" van geheugen aanneemt, terwijl zram als de volgende laag wordt gebruikt en SSD de laatste verdedigingslinie blijft. Dit schema kan nuttig zijn voor werkstations en laptops, waar het belangrijker is om de responsiviteit van het systeem te behouden bij een tekort aan geheugen dan om maximale voorspelbaarheid van vertragingen te krijgen.

Lokale AI/LLM-taken rond de GPU, maar niet in plaats van VRAM voor het model. NBD-VRAM vergroot het videogeheugen dat beschikbaar is voor de CUDA-toepassing niet als VRAM voor het model. Dit is het tegenovergestelde scenario: niet RAM wordt gebruikt als VRAM, maar VRAM wordt gebruikt als swap voor gewoon Linux-geheugen. Daarom zal het project niet toestaan om een groter model rechtstreeks in de GPU te laden. Maar het kan handig zijn op een machine waar naast LLM-inferentie ook browsers, IDE's, indexers, Python-omgevingen en containers draaien, terwijl de systeem-RAM begint op te raken.

Thuis en experimentele werkstations. Het project is interessant voor gebruikers waarvan de videokaart vaak inactief is buiten games, rendering of ML-taken. Bijvoorbeeld, 8–12 GB VRAM op een desktop GeForce kan tijdelijk worden omgevormd tot een extra laag swap voor zware taken zoals compilatie, gegevensverwerking of uitvoering. virtuele machines.

Beperkingen

NBD-VRAM is geen vervanging voor RAM. Toegang tot deze swap gaat via de keten kernel swap → /dev/nbdX → nbd-driver → Unix-socket → daemon → CUDA-kopiĆ«ren → VRAM, waardoor de vertragingen en het gedrag anders zullen zijn dan bij echte RAM. Dit is eerder een nood- of tussenlaag tussen RAM en SSD dan een manier om "geheugen toe te voegen" zonder gevolgen.

Het project is ook afhankelijk van de officiƫle NVIDIA-stack met CUDA. Nouveau/Nova zijn hiervoor niet geschikt, omdat libcuda.so.1 vereist is. Phoronix merkt ook op, dat NBD-VRAM specifiek is ontwikkeld voor consumenten NVIDIA GPU's, waar alternatieve benaderingen via de NVIDIA P2P API niet werken.

In het kort is NBD-VRAM een kleine, maar interessante systeethack voor Linux: het verricht geen wonderen en vervangt geen RAM-upgrade, maar maakt het mogelijk om ongebruikte videogeheugen te gebruiken als een extra swaplaag vóór de SSD. Voor laptops met soldeergeheugen en een discrete RTX-kaart kan dit een praktische manier zijn om piekbelasting te doorstaan zonder dat applicaties onmiddellijk crashen of om traagheidsproblemen naar een langzamere schijf te krijgen.

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster