Byl zveřejněn NBD-VRAM

Byl zveřejněn otevřený projekt NBD-VRAM, který umožňuje využít část video paměti NVIDIA GPU jako swap prostor v Linuxu. Projekt je zaměřen především na notebooky s integrovanou operační pamětí, kde není možné RAM rozšířit, ale přitom je v systému diskrétní grafická karta NVIDIA RTX/GTX s nevyužívanou VRAM. Kód je napsán v C a shellu, je šířen pod licencí MIT.

Myšlenka NBD-VRAM je jednoduchá: pokud systém již začíná přecházet na swap na SSD, je možné umístit před SSD další meziprostor — video paměť. Autor uvádí příklad s notebookem na RTX 3070 Laptop: z 8 GB VRAM bylo vyčleněno 7 GB na swap, a celkově s RAM, zram a SSD swap systém získal přibližně 46 GB adresovatelné paměti. Předpokládaný pořádek přetečení je následující: nejprve se používá RAM, poté VRAM jako rychlý swap, následně zram, a teprve poté SSD.

Technicky NBD-VRAM nepřidává nový ovladač jádra. Malý démon vyčleňuje paměť grafické karty prostřednictvím CUDA Driver API, poté ji předává jádru Linuxu jako blokové zařízení prostřednictvím NBD — Network Block Device — přes Unix socket. Po připojení standardním nbd-client se v systému objeví /dev/nbdX, které lze naformátovat jako běžný swap prostřednictvím mkswap a aktivovat přes swapon.

Autor zvlášť zdůrazňuje, že tento přístup byl zvolen kvůli omezením spotřebitelských grafických karet NVIDIA. Přímější cesta prostřednictvím NVIDIA P2P API na GeForce, podle něj, narazila na EINVAL, protože příslušné funkce jsou fakticky dostupné pouze pro profesionální a serverové modely. Varianta s přímým přístupem k BAR1 také nefungovala: k dispozici je pouze malé mapované pole, a čtení z ostatní části vrací nuly. NBD přístup obchází toto omezení, protože používá běžné CUDA kopírování cuMemcpyHtoD a cuMemcpyDtoH.

Funkce

  • Využití VRAM jako běžného Linux swapu. Po spuštění démon poskytuje video paměť jako /dev/nbd0 nebo jiné NBD zařízení, které pro jádro vypadá jako standardní blokové zařízení.

  • Fungování bez vlastního modulu jádra. Projekt nevyžaduje psaní, sestavování a správu samostatného modul jádra, nevyužívá interní symboly NVIDIA ovladače a měl by přežít aktualizace jádra a ovladače bez opětovného sestavení.

  • Zaměření na spotřebitelské NVIDIA GPU. V požadavcích jsou uvedeny NVIDIA GPU s podporou CUDA, včetně spotřebitelských karet RTX/GTX, oficiálního NVIDIA ovladače s libcuda.so.1, modulu nbd v jádře Linux, nbd-client, gcc a make. CUDA Toolkit v tomto případě není potřeba.

  • Integrace systemd. Instalace pomocí install.sh přidává službu vram-swap-nbd, kterou lze spouštět přes systemctl; po instalaci se služba povolí pro automatické spuštění při startu.

  • Nastavení velikosti a priority swap. V systemd-unit lze nastavit VRAM_SETUP_SIZE_MB, tedy horní limit alokované VRAM, a VRAM_SWAP_PRIORITY, tedy prioritu swapového zařízení. Čím vyšší je priorita, tím dříve Linux použije tuto vrstvu swapu.

  • Automatické zmenšení požadované velikosti. Pokud požadovaný objem VRAM není k dispozici, démon se snaží zmenšit velikost po blocích po 512 MiB, aby přesto alokoval dostupný objem, například pokud je část paměti již obsazena compositorem nebo grafickou relací.

  • Kontrolní skripty. V repozitáři je test-nbd.sh pro kouřový test se zápisem/čtením 1 MiB a test-fill.sh pro stresovou zkoušku celé VRAM oddílu.

  • Uvedený výkon kolem 1,3 GB/s. Na RTX 3070 Laptop autor změřil sekvenční zápis 7 GB bloky po 4 MB přibližně na úrovni 1,3 GB/s.

Scénáře použití

Notebooky s integrovanou RAM. Hlavní scénář – moderní notebooky, kde 16 nebo 32 GB operační paměti již nestačí, ale není možné ji rozšířit. Pokud má takový stroj dedikovanou kartu RTX, část VRAM lze použít jako další swapovou vrstvu. To nepromění VRAM na plnohodnotnou RAM, ale může zachránit systém před náhlým přechodem na pomalý SSD swap nebo před OOM-killerem při špičkových zátěžích.

Těžké pracovní prostředí vývojáře. IDE, prohlížeč s desítkami záložek, kontejnery Docker, místní databáze, sestavení velkých projektů a testovací prostředí snadno vytvářejí krátkodobé špičky v spotřebě paměti. V takovém scénáři může NBD-VRAM fungovat jako buffer: neurychluje běžnou práci, ale zmírňuje okamžiky, kdy RAM došla.

Snížení zátěže na SSD swap. Pokud se na SSD často používá swap, není to jen pomalejší, ale také to vytváří zbytečné zápisy na úložiště. VRAM-swap lze nastavit s vyšší prioritou, aby systém při zaplnění RAM nejprve vyháněl stránky do grafické paměti a teprve poté se obracel na SSD. To je zvlášť aktuální pro notebooky, kde je SSD často neodnímatelný nebo drahý na výměnu.

Kombinace se zram. Autor přímo popisuje schéma, kde VRAM swap dostává vyšší prioritu a jako první "nadzvedává" paměť, zram se používá na další úrovni a SSD zůstává poslední linií obrany. Takové schéma může být užitečné pro pracovní stanice a notebooky, kde je důležitější udržet reakčnost systému při nedostatku paměti než dosáhnout maximální předvídatelnosti latencí.

Místní úlohy AI/LLM kolem GPU, ale ne místo VRAM pro model. NBD-VRAM nezvyšuje grafickou paměť dostupnou pro CUDA aplikaci jako VRAM pro model. Je to obrácený scénář: není RAM používána jako VRAM, ale VRAM je používána jako swap pro běžnou paměť Linuxu. Proto projekt neumožní přímo nahrát do GPU model větší velikosti. Může být však užitečný na stroji, kde vedle LLM inference běží prohlížeč, IDE, indexátory, Python prostředí a kontejnery, a systémová RAM začíná docházet.

Domácí a experimentální pracovní stanice. Projekt je zajímavý pro uživatele, jejichž grafická karta často nečinně stojí mimo hry, rendering nebo ML úlohy. Například 8-12 GB VRAM na desktopové GeForce lze dočasně přeměnit na dodatečnou vrstvu swap pro těžké úlohy kompilace, zpracování dat nebo spuštění. virtuálních strojů.

Omezení

NBD-VRAM není náhradou za operační paměť. Přístup k takovému swapu probíhá řetězcem kernel swap → /dev/nbdX → nbd driver → Unix socket → daemon → CUDA copy → VRAM, takže latence a chování se budou lišit od skutečné RAM. Je to spíše nouzová nebo přechodná vrstva mezi RAM a SSD než způsob "přidat paměť" bez následků.

Projekt je také vázán na oficiální stack NVIDIA s CUDA. Nouveau/Nova pro toto nevyhovují, protože vyžaduje libcuda.so.1. Phoronix také zaznamenává, že NBD-VRAM byl vytvořen právě pro spotřebitelské NVIDIA GPU, kde alternativní přístupy pomocí NVIDIA P2P API nefungují.

Ve zjednodušené podobě, NBD-VRAM je malý, ale zajímavý systémový hack pro Linux: nedělá zázraky a nenahrazuje upgrade RAM, ale umožňuje využít nevyužitou video paměť jako další vrstvu swap před SSD. Pro notebooky s připájenou pamětí a dedikovanou kartou RTX může být praktickým způsobem, jak zvládat špičkové zatížení bez okamžitého pádu aplikací nebo bolestivého přechodu na pomalé úložiště.

Zdroj: linux.org.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster