NBD-VRAM publicerad

Ö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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster