Objavljen je otvoreni projekt NBD-VRAM, koji omogućuje korištenje dijela video memorije NVIDIA GPU-a kao swap prostora u Linuxu. Projekt je prvenstveno usmjeren na prijenosna računala s ugrađenom radnom memorijom, gdje RAM nije moguće proširiti, ali u sustavu postoji diskretna grafička kartica NVIDIA RTX/GTX s neiskorištenom VRAM-om. Kod je napisan na C-u i shellu, a distribuira se pod licencom MIT.
Ideja NBD-VRAM je jednostavna: ako sustav već počinje koristiti swap na SSD-u, može se staviti još jedan međusloj ispred SSD-a — video memorija. Autor daje primjer s prijenosnim računalom na RTX 3070 Laptop: od 8 GB VRAM-a izdvojeno je 7 GB za swap, a ukupno s RAM-om, zram-om i SSD swap-om sustav je dobio oko 46 GB adresabilne memorije. Predviđeni redoslijed preopterećenja je sljedeći: prvo se koristi RAM, zatim VRAM kao brzi swap, zatim zram, i tek na kraju SSD.
Tehnički, NBD-VRAM ne dodaje novi kernel vozač. Mali demon dodjeljuje memoriju grafičke kartice putem CUDA Driver API, a zatim je predaje Linux jezgru kao blok uređaj putem NBD — Network Block Device — preko Unix soketa. Nakon povezivanja putem standardnog nbd-client-a, u sustavu se pojavljuje /dev/nbdX, koji se može formatirati kao običan swap putem mkswap i aktivirati putem swapon.
Autor posebno naglašava da je ovaj pristup odabran zbog ograničenja potrošačkih NVIDIA grafičkih kartica. Izravniji put preko NVIDIA P2P API na GeForce, prema njegovim riječima, nailazi na EINVAL, jer su odgovarajuće mogućnosti zapravo dostupne samo za profesionalne i serverske modele. Opcija s izravnim pristupom BAR1 također nije uspjela: dostupno je samo malo mapirano područje, a čitanje iz ostatka vraća nule. NBD pristup zaobilazi ovo ograničenje jer koristi uobičajeno CUDA kopiranje cuMemcpyHtoD i cuMemcpyDtoH.
Mogućnosti
Korištenje VRAM-a kao običnog Linux swap-a. Nakon pokretanja, demon pruža video memoriju kao /dev/nbd0 ili drugi NBD uređaj koji jezgru izgleda kao običan blok uređaj.
Rad bez vlastitog modula jezgre. Projekt ne zahtijeva pisanje, sastavljanje i održavanje zasebnog kernel modula, ne koristi interne simbole NVIDIA vozača i trebao bi izdržati ažuriranja jezgre i vozača bez ponovnog sastavljanja.
Usmjerenost na potrošačke NVIDIA GPU-e. U zahtjevima su navedeni NVIDIA GPU s podrškom za CUDA, uključujući potrošačke RTX/GTX kartice, službeni NVIDIA drajver s libcuda.so.1, nbd modul u Linux kernelu, nbd-client, gcc i make. CUDA Toolkit nije potreban.
systemd integracija. Instalacija putem install.sh dodaje vram-swap-nbd uslugu koju možete pokrenuti putem systemctl; nakon instalacije, usluga se uključuje za automatsko pokretanje prilikom podizanja sustava.
Postavljanje veličine i prioriteta swap-a. U systemd-jedinici možete postaviti VRAM_SETUP_SIZE_MB, što je gornja granica dodijeljene VRAM, i VRAM_SWAP_PRIORITY, što je prioritet swap uređaja. Što je veći prioritet, Linux će prije koristiti ovaj swap sloj.
Automatsko smanjenje zatražene veličine. Ako tražena količina VRAM nije dostupna, demon pokušava smanjiti veličinu u blokovima od 512 MiB kako bi i dalje dodijelio dostupnu količinu, na primjer, ako je dio memorije već zauzet kompozitorom ili grafičkom sesijom.
Provjerne skripte. U repozitoriju se nalazi test-nbd.sh za smoke test s pisanjem/čitanjem 1 MiB i test-fill.sh za stres testiranje cijelog VRAM dijela.
Prijavljena izvedba oko 1,3 GB/s. Na RTX 3070 Laptop, autor je izmjerio sekvencijalno pisanje 7 GB u blokovima od 4 MB otprilike na razini od 1,3 GB/s.
Scenariji primjene
Laptopi s lemljenom RAM-om. Glavni scenarij su današnji laptopi, gdje 16 ili 32 GB radne memorije više nije dovoljno, ali njezino proširenje nije moguće. Ako takav uređaj ima diskretnu RTX kartu, dio VRAM-a se može koristiti kao dodatni swap sloj. To ne pretvara VRAM u punopravnu RAM, ali može spasiti sustav od naglog prelaska na spori SSD swap ili od OOM-killera pri vršnim opterećenjima.
Teška radna okruženja programera. IDE, preglednici s desetcima kartica, Docker kontejneri, lokalne baze podataka, kompilacije velikih projekata i testna okruženja lako stvaraju trenutačne vrhunce potrošnje memorije. U takvom scenariju NBD-VRAM može raditi kao buffer: ne ubrzava normalan rad, već ublažava trenutak kada RAM ponestane.
Smanjenje opterećenja na SSD swap. Ako se swap na SSD-u često koristi, to ne samo da je sporije, već stvara i dodatno zapisivanje na uređaj. VRAM-swap može se postaviti s višim prioritetom, tako da sustav prvo ispušta stranice u video memoriju prilikom preopterećenja RAM-a, a tek potom se obraća SSD-u. Ovo je posebno važno za prijenosna računala, gdje je SSD često neizvadio ili skup za zamjenu.
Kombinacija sa zram. Autor izravno opisuje shemu, gdje VRAM swap dobiva viši prioritet i prvi uzima 'preliv' memorije, zram se koristi kao sljedeći nivo, a SSD ostaje posljednja crta obrane. Ova shema može biti korisna za radne stanice i prijenosna računala gdje je važnije održati odziv sustava prilikom nedostatka memorije nego dobiti maksimalnu predvidivost latencija.
Lokalni AI/LLM zadaci oko GPU-a, ali ne umjesto VRAM-a za model. NBD-VRAM ne povećava video memoriju dostupnu CUDA aplikaciji kao VRAM za model. Ovo je obrnuti scenarij: ne RAM se koristi kao VRAM, već VRAM se koristi kao swap za uobičajenu Linux memoriju. Stoga projekt ne omogućava izravno učitavanje većeg modela u GPU. Ali može biti koristan na stroju gdje uz LLM inferencu rade preglednici, IDE, indeksatori, Python okruženja i kontejneri, a sistemska RAM počinje ponestajati.
Kućne i eksperimentalne radne stanice. Projekt je zanimljiv za korisnike čija grafička kartica često miruje izvan igara, renderiranja ili ML zadataka. Na primjer, 8–12 GB VRAM-a na desktop GeForce može se privremeno pretvoriti u dodatni sloj swap-a za teške zadatke kompilacije, obrade podataka ili pokretanja. virtualnih mašina.
Ograničenja
NBD-VRAM nije zamjena za radnu memoriju. Pristup takvom swapu ide putem lanca kernel swap → /dev/nbdX → nbd draiver → Unix socket → demon → CUDA kopiranje → VRAM, stoga će latencije i ponašanje biti različiti od stvarne RAM-a. To je više hitni ili međusloj između RAM-a i SSD-a nego način 'dodavanja memorije' bez posljedica.
Također, projekt se oslanja na službeni NVIDIA stack s CUDA. Nouveau/Nova za ovo nisu prikladni, jer je potreban libcuda.so.1. Phoronix također ističe, da je NBD-VRAM stvoren upravo za potrošačke NVIDIA GPU-ove, gdje alternativni pristupi putem NVIDIA P2P API ne rade.
U konačnici, NBD-VRAM je mali, ali zanimljiv sistemski hak za Linux: ne čini čuda i ne zamenjuje nadogradnju RAM-a, ali omogućava korišćenje neiskorišćene video memorije kao dodatni nivo swap-a pre SSD-a. Za laptope sa integrisanom memorijom i diskretnom RTX karticom, ovo bi mogla biti praktična opcija za podnošenje vršnih opterećenja bez trenutnog pada aplikacija ili bolnog prelaska na sporiji disk.
Izvor: linux.org.ru
