Byl publikován open source projekt NBD-VRAM, což vám umožňuje použít část videopaměti grafického procesoru NVIDIA jako odkládací prostor v LinuxProjekt je primárně zaměřen na notebooky s pájenou pamětí RAM, kde nelze RAM rozšířit, ale systém má samostatnou grafickou kartu NVIDIA RTX/GTX s nevyužitou VRAM. Kód je napsán v jazyce C a shellu a je distribuován pod licencí. MIT.
Myšlenka NBD-VRAM je jednoduchá: pokud systém již začíná přecházet na SSD, můžete před SSD přidat další mezivrstvu – videopaměť. Autor uvádí příklad notebooku. Notebook RTX 3070Z 8 GB VRAM bylo 7 GB alokováno pro swap a s RAM, zRAM a SSD swapem měl systém celkem přibližně 46 GB adresovatelné paměti. Očekávané pořadí přetečení je následující: nejprve se použije RAM, poté VRAM jako rychlý swap, poté zRAM a teprve poté SSD.
Technicky vzato, NBD-VRAM nepřidává nový ovladač jádra. Malý démon alokuje paměť grafické karty prostřednictvím API ovladače CUDA, pak to dává jádru Linux jako blokové zařízení prostřednictvím NBD — Síťové blokové zařízení (Network Block Device) — přes unixový socket. Po připojení se standardním nbd-klientem se v systému zobrazí /dev/nbdX, který lze namapovat jako běžný swapovací disk pomocí mkswap a povolit pomocí swaponu.
Autor zdůrazňuje, že tento přístup byl zvolen kvůli omezením spotřebitelských grafických karet NVIDIA. Poznamenává, že přímější přístup prostřednictvím rozhraní NVIDIA P2P API na GeForce naráží na chybu EINVAL, protože odpovídající funkce jsou efektivně dostupné pouze pro profesionální a serverové modely. Přímý přístup k BAR1 také selhal: přístupná je pouze malá mapovaná oblast a čtení ze zbytku vrací nuly. Přístup NBD toto omezení obchází použitím standardních kopírovacích operací CUDA cuMemcpyHtoD a cuMemcpyDtoH.
Možnosti
Používání VRAM jako obvykle Linux vyměnit. Po spuštění démon zpřístupní videopaměť jako /dev/nbd0 nebo jiné NBD zařízení, které se jádru jeví jako standardní blokové zařízení.
Funguje bez vlastního modulu jádra. Projekt nevyžaduje psaní, sestavování a údržbu samostatného modulu jádra, nepoužívá interní symboly ovladačů NVIDIA a měl by přežít aktualizace jádra a ovladačů bez nutnosti opětovné sestavy.
Zaměřeno na spotřebitelské grafické karty NVIDIA. Mezi požadavky patří grafická karta NVIDIA s podporou CUDA, včetně spotřebitelských grafických karet RTX/GTX, oficiální ovladač NVIDIA s knihovnou libcuda.so.1 a modul jádra nbd. Linux, nbd-client, gcc a make. Sada nástrojů CUDA není vyžadována.
integrace se systémem D. Instalace pomocí souboru install.sh přidá službu vram-swap-nbd, kterou lze spustit pomocí systemctl; po instalaci je služba povolena pro automatické spuštění při spuštění systému.
Nastavení velikosti a priority swapu. V systemd-unit můžete nastavit VRAM_SETUP_SIZE_MB, což je horní limit alokované paměti VRAM, a VRAM_SWAP_PRIORITY, což je priorita swapovacího zařízení. Čím vyšší priorita, tím dříve se zařízení spustí. Linux použije tuto výměnnou vrstvu.
Automaticky zmenšit požadovanou velikost. Pokud není k dispozici požadované množství paměti VRAM, démon se pokusí zmenšit velikost v blocích o velikosti 512 MiB, aby stále alokoval dostupné množství, například pokud je část paměti již obsazena kompozitorem nebo grafickou relací.
Testovací scénáře. Repozitář obsahuje soubor test-nbd.sh pro kouřový test s 1 MiB čtení/zápis a soubor test-fill.sh pro zátěžové testování celého oddílu VRAM.
Deklarovaný výkon je okolo 1,3 GB/s. Na notebooku s grafickou kartou RTX 3070 autor naměřil sekvenční zápisy o objemu 7 GB v blocích o velikosti 4 MB rychlostí přibližně 1,3 GB/s.
Сценарии применения
Notebooky s pájenou RAM. Hlavním scénářem jsou moderní notebooky, kde 16 nebo 32 GB RAM již nestačí, ale rozšíření není možné. Pokud má takový stroj samostatnou grafickou kartu RTX, lze část VRAM použít jako další swapovací vrstvu. Tím se VRAM nestane plnohodnotnou RAM, ale může se zabránit náhlému přepnutí systému na pomalý SSD swap nebo pádům systému při špičkovém zatížení, které způsobují OOM-killer.
Náročná pracovní prostředí pro vývojáře. IDE, prohlížeče s desítkami záložek, kontejnery Docker, lokální databáze, sestavení velkých projektů a testovací prostředí mohou snadno způsobit krátkodobé nárůsty spotřeby paměti. V takovém scénáři může NBD-VRAM fungovat jako vyrovnávací paměť: nezrychluje běžnou práci, ale spíše zmírňuje okamžik, kdy dojde RAM.
Snížené zatížení SSD swapu. Časté používání swapu na SSD disku nejen zpomaluje systém, ale také vytváří zbytečné zápisy na disk. Swap VRAM lze nastavit na vyšší prioritu, takže když je RAM plná, systém nejprve uloží stránky do videopaměti a poté přistupuje k SSD disku. To je obzvláště důležité pro notebooky, kde je SSD disk často nevyměnitelný nebo je jeho výměna drahá.
Kombinace se zramem. Autor jasně popisuje schéma, kde swap VRAM má vyšší prioritu a obdrží první paměťové „přelití“, zRAM se používá jako další a SSD zůstává poslední linií obrany. Toto schéma může být užitečné pro pracovní stanice a notebooky, kde je udržení odezvy systému pod tlakem paměti důležitější než dosažení maximální předvídatelnosti latence.
Lokální úlohy AI/LLM v okolí GPU, ale ne místo VRAM pro model. NBD-VRAM nezvyšuje velikost videopaměti dostupné pro aplikaci CUDA jako VRAM pro daný model. Toto je opačný scénář: místo RAM používané jako VRAM se VRAM používá jako odkládací prostor pro běžnou paměť. LinuxProjekt proto neumožňuje přímé načítání většího modelu na GPU. Mohl by však být užitečný na počítači s prohlížečem, IDE, indexery, prostředími Pythonu a kontejnery spolu s inferencí LLM a tam, kde systémové paměti RAM začíná docházet.
Domácí a experimentální pracovní stanice. Projekt je zajímavý pro uživatele, jejichž grafické karty jsou často nečinné mimo hraní her, renderování nebo úlohy strojového učení. Například 8–12 GB VRAM na stolní grafické kartě GeForce lze dočasně převést na další swapovací vrstvu pro náročné kompilační, datové nebo spouštěcí úlohy. virtuální stroje.
Omezení
NBD-VRAM nenahrazuje RAM. Přístup k tomuto odkládacímu prostoru probíhá v tomto řetězci: odkládací prostor kernelu → /dev/nbdX → ovladač nbd → unixový socket → démon → kopie CUDA → VRAM, takže latence a chování se budou lišit od skutečné RAM. Je to spíše záložní nebo mezivrstva mezi RAM a SSD než způsob, jak „přidat paměť“ bez následků.
Projekt se také spoléhá na oficiální CUDA stack od NVIDIA. Nouveau/Nova se pro to nehodí, protože vyžadují libcuda.so.1. Phoronix také poznamenáváže NBD-VRAM je navržena speciálně pro spotřebitelské grafické karty NVIDIA, kde alternativní přístupy prostřednictvím rozhraní NVIDIA P2P API nefungují.
Nakonec je NBD-VRAM malý, ale zajímavý systémový trik pro... LinuxNedělá sice zázraky a nenahrazuje upgrade RAM, ale umožňuje používat nečinnou grafickou paměť jako další odkládací prostor před SSD. Pro notebooky s pájenou pamětí a samostatnou RTX kartou by to mohl být praktický způsob, jak zvládat špičkové zatížení bez okamžitých pádů aplikací nebo bolestivé ztráty paměti v důsledku pomalejšího disku.
Zdroj: linux.org.ru
