Ăppet projekt publicerat NBD-VRAM, som gör det möjligt att anvĂ€nda en del av NVIDIA GPU:s videominne som swap-utrymme i Linux. Projektet Ă€r frĂ€mst inriktat pĂ„ bĂ€rbara datorer med lödd RAM, dĂ€r RAM inte kan utökas, men det finns ett dedikerat NVIDIA RTX/GTX grafikkort med oanvĂ€nt VRAM. Koden Ă€r skriven i C och shell och distribueras under licensen MIT.
IdĂ©n med NBD-VRAM Ă€r enkel: om systemet redan börjar anvĂ€nda swap pĂ„ SSD, kan vi lĂ€gga till ett mellanlager innan SSD â videominnet. Författaren ger ett exempel med en bĂ€rbar dator med RTX 3070 Laptop: frĂ„n 8 GB VRAM tilldelades 7 GB för swap, och tillsammans med RAM, zram och SSD swap fick systemet cirka 46 GB adresserbart minne. Den föreslagna ordningen för överflöde Ă€r sĂ„dan: först anvĂ€nds RAM, sedan VRAM som snabb swap, dĂ€refter zram, och först dĂ„ SSD.
Tekniskt sett lĂ€gger NBD-VRAM inte till en ny kĂ€rndrivrutin. En liten demon tilldelar grafikminnet via CUDA Driver API, och ger det till Linux-kĂ€rnan som en blockenhet via NBD â Network Block Device â ovanpĂ„ en Unix-socket. Efter anslutning via standard nbd-client dyker /dev/nbdX upp i systemet, som kan partitioneras som vanlig swap genom mkswap och aktiveras via swapon.
Författaren betonar sÀrskilt att detta tillvÀgagÄngssÀtt valdes pÄ grund av begrÀnsningarna hos konsumentgrafikkort frÄn NVIDIA. En mer direkt vÀg genom NVIDIA P2P API pÄ GeForce, enligt honom, stöter pÄ EINVAL, eftersom motsvarande funktioner i praktiken endast Àr tillgÀngliga för professionella och servermodeller. Alternativet med direkt Ätkomst till BAR1 fungerade inte heller: endast ett litet avbildat omrÄde var tillgÀngligt, och lÀsning frÄn resten returnerade nollor. NBD-tillvÀgagÄngssÀttet kringgÄr denna begrÀnsning, eftersom det anvÀnder vanliga CUDA-kopior cuMemcpyHtoD och cuMemcpyDtoH.
Funktioner
AnvÀndning av VRAM som vanlig Linux-swap. Efter att ha startat demon tillhandahÄller den videominne som /dev/nbd0 eller annan NBD-enhet, som för kÀrnan ser ut som en vanlig blockenhet.
Fungerar utan egen kÀrnmodul. Projektet krÀver inte att skriva, kompilera och underhÄlla en separat kernelmodul, anvÀnder inte interna symboler frÄn NVIDIA-drivrutinen och ska klara kÀrn- och drivrutinsuppdateringar utan att behöva kompilera om.
Inriktning pÄ konsument-NVIDIA GPU. Kravena innefattar NVIDIA GPU med CUDA-stöd, inklusive konsument RTX/GTX-kort, officiell NVIDIA-drivrutin med libcuda.so.1, nbd-modul i Linux-kÀrnan, nbd-client, gcc och make. CUDA Toolkit behövs inte.
systemd-integration. Installation via install.sh lÀgger till tjÀnsten vram-swap-nbd, som kan startas via systemctl; efter installationen aktiveras tjÀnsten för automatisk start vid uppstart.
Konfigurering av storlek och prioritet för swap. I systemd-enheten kan VRAM_SETUP_SIZE_MB anges, det vill sÀga det övre grÀnsvÀrdet för tilldelad VRAM, och VRAM_SWAP_PRIORITY, vilket innebÀr prioriteten för swap-enheten. Ju högre prioritet, desto tidigare kommer Linux att anvÀnda detta swap-lager.
Automatisk minskning av begÀrd storlek. Om den begÀrda mÀngden VRAM inte Àr tillgÀnglig försöker demon att minska storleken i block om 512 MiB för att fortfarande kunna allokera tillgÀnglig mÀngd, till exempel om en del av minnet redan Àr upptaget av kompositorn eller en grafisk session.
Testscenarier. I arkivet finns test-nbd.sh för röktest med skrivning/lÀsning pÄ 1 MiB och test-fill.sh för stresstest av hela VRAM-partitionen.
Uppgiven prestanda runt 1,3 GB/s. PÄ RTX 3070 Laptop mÀtte författaren sekventiell skrivning av 7 GB i block om 4 MB pÄ ungefÀr 1,3 GB/s.
AnvÀndningsscenarier
BÀrbara datorer med integrerad RAM. Det frÀmsta scenariot Àr moderna bÀrbara datorer dÀr 16 eller 32 GB RAM redan inte rÀcker, men att utöka den Àr omöjligt. Om en sÄdan maskin har ett dedikerat RTX-kort kan en del av VRAM anvÀndas som ett extra swap-lager. Detta gör inte VRAM till fullvÀrdig RAM men kan rÀdda systemet frÄn att plötsligt gÄ in i lÄngsam SSD-swap eller frÄn OOM-killer vid toppbelastningar.
Tunga arbetsmiljöer för utvecklare. IDE, webblÀsare med dussintals flikar, Docker-containrar, lokala databaser, byggande av stora projekt och testmiljöer kan lÀtt skapa kortvariga toppar i minnesanvÀndningen. I ett sÄdant scenario kan NBD-VRAM fungera som en buffert: inte snabba upp vanligt arbete, utan mildra ögonblicket nÀr RAM tar slut.
Minska belastningen pÄ SSD-swap. Om swap pÄ SSD anvÀnds ofta, Àr det inte bara lÄngsammare utan skapar ocksÄ onödig skrivning pÄ lagringsenheten. VRAM-swap kan sÀttas med högre prioritet sÄ att systemet först avlastar sidor till videominnet vid minnesbrist och först dÀrefter anvÀnder SSD. Detta Àr sÀrskilt relevant för bÀrbara datorer, dÀr SSD ofta ocksÄ Àr svÄrÄtkomlig eller dyr att byta ut.
Kombination med zram. Författaren beskriver direkt ett schema dÀr VRAM swap fÄr högre prioritet och tar första "översvÀmningen" av minnet, zram anvÀnds pÄ nÀsta nivÄ och SSD förblir sista försvarslinjen. Detta schema kan vara fördelaktigt för arbetsstationer och bÀrbara datorer, dÀr det Àr viktigare att upprÀtthÄlla systemets responsivitet vid minnesbrist Àn att uppnÄ maximal förutsÀgbarhet i fördröjningar.
Lokala AI/LLM-uppgifter kring GPU, men inte istÀllet för VRAM för modellen. NBD-VRAM ökar inte den videominne som Àr tillgÀnglig för CUDA-programmet som VRAM för modellen. Detta Àr ett omvÀnt scenario: inte RAM anvÀnds som VRAM, utan VRAM anvÀnds som swap för vanlig Linux-minne. DÀrför kommer projektet inte direkt att tillÄta att ladda in en större modell i GPU. Men det kan vara anvÀndbart pÄ en maskin dÀr en webblÀsare, IDE, indexerare, Python-miljöer och containrar körs bredvid LLM-inferens och systemets RAM börjar ta slut.
Hemmabaserade och experimentella arbetsstationer. Projektet Ă€r intressant för anvĂ€ndare vars grafikkort ofta stĂ„r stilla utanför spel, rendering eller ML-uppgifter. Till exempel kan 8â12 GB VRAM pĂ„ en skrivbords-GeForce tillfĂ€lligt omvandlas till ett extra lager swap för tunga uppgifter som kompilering, databehandling eller körning. virtuella maskiner.
BegrÀnsningar
NBD-VRAM Ă€r inte en ersĂ€ttning för RAM-minne. Ă tkomst till sĂ„dan swap gĂ„r genom kedjan kernel swap â /dev/nbdX â nbd-drivrutin â Unix-socket â demon â CUDA-kopiering â VRAM, sĂ„ fördröjningar och beteende kommer att skilja sig frĂ„n verkligt RAM. Det Ă€r snarare ett nödlĂ€ge eller ett intermediĂ€rt lager mellan RAM och SSD, snarare Ă€n ett sĂ€tt att "lĂ€gga till minne" utan konsekvenser.
Projektet Àr ocksÄ beroende av den officiella NVIDIA-stacken med CUDA. Nouveau/Nova passar inte för det, eftersom libcuda.so.1 krÀvs. Phoronix noterar ocksÄ, att NBD-VRAM skapades specifikt för konsument-NVIDIA GPU:er, dÀr alternativa metoder genom NVIDIA P2P API inte fungerar.
I det stora hela Àr NBD-VRAM en liten men intressant systemhack för Linux: den gör inga mirakel och ersÀtter inte en RAM-uppgradering, men möjliggör anvÀndning av oanvÀnd videominne som ett extra lager swap innan SSD:n. För laptops med fastlödd minne och diskret RTX-kort kan detta visa sig vara ett praktiskt sÀtt att klara av toppbelastningar utan omedelbara appnedgÄngar eller smÀrtsamma övergÄngar till lÄngsam lagring.
KĂ€lla: linux.org.ru
