Projekt publik është hapur NBD-VRAM, duke lejuar përdorimin e një pjese të memories video të NVIDIA GPU si hapësirë swap në Linux. Projekti është fokusuar kryesisht në laptopët me RAM të salduar, ku RAM nuk mund të zgjerohet, por në sistem ka një kartë grafike diskrete NVIDIA RTX/GTX me VRAM të papërdorur. Kodi është shkruar në C dhe shell, shpërndahet nën licencën MIT.
Ideja e NBD-VRAM Ă«shtĂ« e thjeshtĂ«: nĂ«se sistemi fillon tĂ« kalojĂ« nĂ« swap nĂ« SSD, mund tĂ« vendosĂ«sh para SSD njĂ« shtresĂ« ndĂ«rmjetĂ«se â memories video. Autori jep shembullin me njĂ« laptop nĂ« RTX 3070 Laptop: nga 8 GB VRAM, 7 GB janĂ« dedikuar pĂ«r swap, dhe sĂ« bashku me RAM, zram dhe SSD swap, sistemi ka marrĂ« rreth 46 GB memorie tĂ« adresueshme. Rendi i parashikuar i mbipopullimit Ă«shtĂ« i tillĂ«: fillimisht pĂ«rdoret RAM, pastaj VRAM si swap i shpejtĂ«, pastaj zram, dhe vetĂ«m pas kĂ«saj SSD.
Teknikisht, NBD-VRAM nuk shton njĂ« drejtuese tĂ« re nĂ« bĂ«rthamĂ«. NjĂ« demon i vogĂ«l dedikon memorjen e kartĂ«s grafike pĂ«rmes CUDA Driver API, pastaj e kthen nĂ« bĂ«rthamĂ«n Linux si njĂ« pajisje blloku pĂ«rmes NBD â Pajisja Blloku Rrjeti â mbi Unix-soket. Pas lidhjes, nbd-client standard nĂ« sistem krijon njĂ« /dev/nbdX, tĂ« cilin mund tĂ« pĂ«rshkruash si swap tĂ« zakonshĂ«m pĂ«rmes mkswap dhe ta aktivizosh pĂ«rmes swapon.
Autori thekson veçanërisht se ky qasje është zgjedhur për shkak të kufizimeve të kartave grafike NVIDIA për konsumatorët. Një rrugë më e drejtpërdrejtë përmes NVIDIA P2P API në GeForce, sipas tij, bllokohet nga EINVAL, pasi mundësitë përkatëse janë në fakt të disponueshme vetëm për modelet profesionale dhe serverike. Një opsion me qasje të drejtpërdrejtë në BAR1 gjithashtu nuk funksionoi: vetëm një zonë e vogël e shfaqur është e disponueshme, dhe leximi nga pjesa tjetër kthen zero. Qasja NBD e shmang këtë kufizim, pasi përdor kopjime të zakonshme CUDA cuMemcpyHtoD dhe cuMemcpyDtoH.
Mundësitë
Përdorimi i VRAM si swap i zakonshëm në Linux. Pas aktivizimit, demoni ofron memorjen video si /dev/nbd0 ose një tjetër pajisje NBD, që për bërthamën duket si një pajisje blloku standarde.
Puna pa modul të vetin në bërthamë. Projekti nuk kërkon të shkruash, mbledhësh dhe mbështetësh një modul të veçantë kernel, nuk përdor simbole të brendshme të drejtueseve NVIDIA dhe duhet të përballojë përditësimet e bërthamës dhe të drejtuesve pa ri-konstruksion.
Orientimi ndaj GPU-ve NVIDIA për konsumatorët. Kërkesat përfshijnë GPU NVIDIA me mbështetje për CUDA, duke përfshirë kartat RTX/GTX të konsumatorëve, drejtuesin zyrtar NVIDIA me libcuda.so.1, modul nbd në bërthamën Linux, nbd-client, gcc dhe make. Toolkit-i CUDA nuk është i nevojshëm.
Integrimi me systemd. Instalimi përmes install.sh shton shërbimin vram-swap-nbd, i cili mund të nisë përmes systemctl; pas instalimit, shërbimi aktivizohet për nisje automatike gjatë ngarkesës.
Konfigurimi i madhësisë dhe prioritetit të swap. Në unit-in e systemd, mund të përcaktohet VRAM_SETUP_SIZE_MB, që do të thotë kufiri i sipërm për alokimin e VRAM, dhe VRAM_SWAP_PRIORITY, që do të thotë prioriteti i pajisjes swap. Sa më i lartë të jetë prioriteti, aq më shpejt Linux do të përdorë këtë shtresë swap.
Reducimi automatik i madhësisë së kërkuar. Nëse sasia e kërkuar e VRAM nuk është e disponueshme, demon-i përpiqet të reduktojë madhësinë me blloqe prej 512 MiB, për të alokuar një sasi të mundshme, për shembull, nëse një pjesë e memories është e zënë nga kompozitori ose një seancë grafike.
Skenarët e provës. Në repositor është test-nbd.sh për një test të thjeshtë me shkrim/lexim 1 MiB dhe test-fill.sh për një test stresi të tërë seksionit VRAM.
Performanca e shpallur është rreth 1,3 GB/s. Në RTX 3070 Laptop, autori mat një shkrim të vazhdueshëm 7 GB me blloqe prej 4 MB rreth nivelit 1,3 GB/s.
Skenarët e aplikimit
Laptopët me RAM të integruar. Skenari kryesor është laptopët modernë, ku 16 ose 32 GB RAM nuk janë të mjaftueshme, por zgjerimi i saj nuk është i mundur. Nëse një makinë e tillë ka një kartë RTX diskrete, një pjesë e VRAM mund të përdoret si një shtresë shtesë swap. Kjo nuk e kthen VRAM në RAM të plotë, por mund të shpëtojë sistemin nga një kalim të papritur në një swap të ngadalshëm SSD ose nga OOM-killer gjatë ngarkesave maksimale.
Mjedise të rënda pune për zhvillues. IDE, shfletues me dhjetëra skeda, konteinerë Docker, bazat e të dhënave lokale, ndërtimet e projekteve të mëdha dhe mjediset e testimit lehtësisht krijojnë majat momentale në përdorimin e memories. Në këtë skenar, NBD-VRAM mund të funksionojë si një tampon: nuk e përshpejton punën e zakonshme, por zbut momentin kur RAM-i e përfundon.
Reduktimi i ngarkesës në SSD swap. Nëse swap në SSD përdoret shpesh, kjo jo vetëm që është më e ngadalshme, por gjithashtu krijon shkresa të panevojshme në ruajtës. VRAM-swap mund të vendoset me një prioritet më të lartë, në mënyrë që kur RAM-i mbushet, sistemi të evakuarojë menjëherë faqet në memorjen video dhe pastaj të kthehet te SSD. Kjo është veçanërisht e rëndësishme për laptopët, ku SSD shpesh është i pamundur për t'u shkëputur ose i kushtueshëm për t'u ndërruar.
Kombinimi me zram. Autori pĂ«rshkruan qartĂ« njĂ« skemĂ« ku VRAM swap merr prioritet mĂ« tĂ« lartĂ« dhe merr ârrjedhĂ«nâ e parĂ« tĂ« memories, zram pĂ«rdoret si shtresa e ardhshme, ndĂ«rsa SSD mbetet linja e fundit e mbrojtjes. NjĂ« skemĂ« e tillĂ« mund tĂ« jetĂ« e dobishme pĂ«r stacionet e punĂ«s dhe laptopĂ«t, ku Ă«shtĂ« mĂ« e rĂ«ndĂ«sishme tĂ« ruhet reagimi i sistemit nĂ« rast mungese tĂ« memories, sesa tĂ« merret maksimumi i parashikueshmĂ«risĂ« sĂ« vonesave.
Detyrat lokale AI/LLM rreth GPU-së, por jo në vend të VRAM për modelin. NBD-VRAM nuk rrit memorjen video të disponueshme për aplikacionin CUDA si VRAM për modelin. Kjo është një skenar i kundërt: jo RAM-i përdoret si VRAM, por VRAM përdoret si swap për memorjen e zakonshme të Linux. Prandaj, projekti nuk do të lejojë ngarkimin e drejtpërdrejtë në GPU të një modeli më të madh. Por ai mund të jetë i dobishëm në një makinë, ku përveç LLM-inference punojnë shfletuesit, IDE, indeksuesit, ambientet Python dhe kontejnerët, ndërsa RAM-i sistemik fillon të mbarojë.
Stacionet e punĂ«s shtĂ«piake dhe eksperimantale. Projekti Ă«shtĂ« interesant pĂ«r pĂ«rdoruesit, ku karta grafike shpesh Ă«shtĂ« e papĂ«rdorur jashtĂ« lojĂ«rave, renderimit ose detyrave ML. PĂ«r shembull, 8â12 GB VRAM nĂ« njĂ« GeForce desktop mund tĂ« shndĂ«rrohet pĂ«rkohĂ«sisht nĂ« njĂ« shtresĂ« shtesĂ« swap pĂ«r detyra tĂ« rĂ«nda tĂ« kompilimit, pĂ«rpunimit tĂ« tĂ« dhĂ«nave ose ekzekutimit. makinave virtuale.
Kufizimet
NBD-VRAM nuk Ă«shtĂ« njĂ« zĂ«vendĂ«sim pĂ«r memorjen e pĂ«rkohshme. Qasja nĂ« kĂ«tĂ« swap ndodhet nĂ« zinxhirin kernel swap â /dev/nbdX â nbd-drajver â Unix-socket â demon â CUDA-transfer â VRAM, prandaj vonesat dhe sjellja do tĂ« jenĂ« tĂ« ndryshme nga RAM-i i vĂ«rtetĂ«. Ky Ă«shtĂ« mĂ« shumĂ« njĂ« shtresĂ« emergjente ose ndĂ«rmjetĂ«se midis RAM dhe SSD-sĂ«, sesa njĂ« mĂ«nyrĂ« pĂ«r "tĂ« shtuar memorien" pa pasoja.
Projektin gjithashtu e lidh me stekën zyrtare të NVIDIA me CUDA. Nouveau/Nova nuk janë të përshtatshme për këtë, pasi kërkohet libcuda.so.1. Phoronix gjithashtu vëren, që NBD-VRAM është krijuar pikërisht për GPU-të konsumatorëve të NVIDIA, ku qasjet alternative përmes NVIDIA P2P API nuk funksionojnë.
Në përfundim, NBD-VRAM është një hije e vogël, por interesante sistematike për Linux: ai nuk bën mrekullira dhe nuk e zëvendëson përmirësimin e RAM-it, por lejon përdorimin e memorizimit grafik që është në pritje si një shkallë shtesë swap përpara SSD-së. Për laptopët me memorie të salduar dhe karta discreate RTX, kjo mund të jetë një mënyrë praktike për të përballuar ngarkesat maksimale pa rënie të menjëhershme të aplikacioneve ose kalim të dhimbshëm në një ruajtës të ngadalshëm.
Burimi: linux.org.ru
