NBD-VRAM er offentliggjort

Offentliggjort åbent projekt NBD-VRAM, som gør det muligt at bruge en del af NVIDIA GPU's videohukommelse som swap-plads i Linux. Projektet er primært rettet mod bærbare computere med loddet RAM, hvor RAM ikke kan udvides, men hvor der er et diskret NVIDIA RTX/GTX grafikkort med ubrugt VRAM. Koden er skrevet i C og shell, og distribueres under en licens MIT.

Idéen bag NBD-VRAM er enkel: hvis systemet allerede begynder at gå over i swap på SSD, kan man indsætte et ekstra lag foran SSD'en - videohukommelsen. Forfatteren giver et eksempel med en bærbar computer med RTX 3070 Laptop: af de 8 GB VRAM blev der tildelt 7 GB til swap, og samlet set med RAM, zram og SSD swap fik systemet omkring 46 GB adresserbar hukommelse. Den foreslåede rækkefølge for overbelastning er: først bruges RAM, derefter VRAM som hurtig swap, derefter zram, og først derefter SSD.

Teknisk set tilføjer NBD-VRAM ikke en ny kerndrivere. En lille daemon tildeler hukommelse fra grafikkortet via CUDA Driver API, og giver derefter denne hukommelse til Linux-kernen som et blokniveau enhed via NBD — Network Block Device — oven på en Unix-socket. Efter tilslutning vises /dev/nbdX i systemet, som kan partitioneres som et almindeligt swap via mkswap og aktiveres med swapon.

Forfatteren understreger, at denne tilgang er valgt på grund af begrænsningerne ved forbruger NVIDIA grafikkort. En mere direkte vej gennem NVIDIA P2P API på GeForce, ifølge ham, støder på EINVAL, da de relevante funktioner praktisk talt kun er tilgængelige for professionelle og servermodeller. Muligheden for direkte adgang til BAR1 virkede heller ikke: kun et lille kortlagt område er tilgængeligt, og læsning fra den resterende del returnerer nuller. NBD-tilgangen omgår denne begrænsning, da den bruger normale CUDA-kopieringsmetoder cuMemcpyHtoD og cuMemcpyDtoH.

Muligheder

  • Brug af VRAM som almindelig Linux swap. Efter opstarten stiller daemonen videohukommelsen til rådighed som /dev/nbd0 eller en anden NBD-enhed, som for kernen ser ud som en standard blok enhed.

  • Arbejde uden egen kerndrivere. Projektet kræver ikke at skrive, kompilere og vedligeholde en separat kerndriver, bruger ikke interne symboler fra NVIDIA-driveren og skal kunne klare kernel- og driveropdateringer uden rekonstruktion.

  • Fokus på forbruger NVIDIA GPU. Kravene nævner NVIDIA GPU'er med CUDA-understøttelse, herunder forbruger RTX/GTX-kort, den officielle NVIDIA-driver med libcuda.so.1, nbd-modulet i Linux-kernen, nbd-client, gcc og make. CUDA Toolkit er ikke nødvendigt.

  • systemd-integration. Installationen via install.sh tilføjer tjenesten vram-swap-nbd, som kan startes via systemctl; efter installationen aktiveres tjenesten for automatisk opstart ved boot.

  • Konfiguration af swap-størrelse og prioritet. I systemd-enheden kan du angive VRAM_SETUP_SIZE_MB, hvilket er den øvre grænse for tildelt VRAM, og VRAM_SWAP_PRIORITY, hvilket er prioriteten for swap-enheden. Jo højere prioritet, desto tidligere vil Linux bruge dette swap-lag.

  • Automatisk reduktion af den anmodede størrelse. Hvis den krævede mængde VRAM ikke er tilgængelig, forsøger dæmonen at reducere størrelsen med blokke på 512 MiB for stadig at allokere den tilgængelige mængde, eksempelvis hvis en del af hukommelsen allerede er optaget af en compositor eller grafisk session.

  • Testscenarier. I repository'et findes der test-nbd.sh til rygeprøve med skrivning/læsning af 1 MiB og test-fill.sh til stresstest af hele VRAM-partitionen.

  • Den angivne ydeevne er omkring 1,3 GB/s. På RTX 3070 Laptop målte forfatteren sekventiel skrivning med 7 GB blokke på 4 MB på omtrent 1,3 GB/s.

Anvendelsesscenarier

Laptops med loddet RAM. Hovedscenariet er moderne laptops, hvor 16 eller 32 GB RAM allerede er utilstrækkeligt, men hvor det ikke er muligt at udvide. Hvis en sådan maskine har et diskret RTX-kort, kan en del af VRAM bruges som et ekstra swap-lag. Dette gør ikke VRAM til fuldgyldig RAM, men det kan redde systemet fra pludselig at skifte til langsom SSD swap eller fra OOM-killer ved spidsbelastninger.

Tunge udviklingsmiljøer. IDE, browser med dusinvis af faner, Docker-containere, lokale databaser, bygninger af store projekter og testmiljøer skaber nemt kortvarige spidser i hukommelsesforbruget. I et sådant scenarie kan NBD-VRAM fungere som buffer: ikke for at accelerere den almindelige drift, men for at afhjælpe det øjeblik, hvor RAM løber tør.

Reducering af belastningen på SSD swap. Hvis swap på SSD bruges ofte, er det ikke kun langsommere, men det skaber også unødig skrivning på lagermediet. VRAM-swap kan tildeles højere prioritet, så systemet først frigiver sider til videohukommelsen ved RAM-overbelastning, før det henvender sig til SSD. Dette er især relevant for bærbare computere, hvor SSD ofte også er svært at udskifte eller dyrt.

Kombination med zram. Forfatteren beskriver direkte et skema, hvor VRAM-swap får højere prioritet og tager det første 'spil' af hukommelsen, zram bruges som det næste niveau, og SSD forbliver sidste forsvarslinje. Dette skema kan være nyttigt for arbejdsstationer og bærbare computere, hvor det er vigtigere at bevare systemets responsivitet ved hukommelsesmangel end at opnå maksimal forudsigelighed af forsinkelse.

Lokale AI/LLM-opgaver omkring GPU, men ikke i stedet for VRAM til modellen. NBD-VRAM øger ikke videohukommelsen tilgængelig for CUDA-applikationen som VRAM til modellen. Det er det modsatte scenarie: ikke RAM bruges som VRAM, men VRAM bruges som swap til almindelig Linux-hukommelse. Derfor tillader projektet ikke direkte at indlæse en større model i GPU. Men det kan være nyttigt på en maskine, hvor browser, IDE, indekseringsværktøjer, Python-miljøer og containere arbejder sammen med LLM-inferens, og systemets RAM begynder at løbe tør.

Hjemme- og eksperimentelle arbejdsstationer. Projektet er interessant for brugere, hvis grafikkort ofte står stille uden for spil, rendering eller ML-opgaver. For eksempel kan 8-12 GB VRAM på en desktop GeForce midlertidigt blive til et ekstra lag swap til tunge opgaver som kompilering, databehandling eller kørsel. virtual machines.

Begrænsninger

NBD-VRAM er ikke en erstatning for RAM. Adgangen til sådan swap sker gennem kæden kernel swap → /dev/nbdX → nbd-driver → Unix-socket → daemon → CUDA-kopiering → VRAM, så forsinkelserne og adfærden vil være forskellige fra ægte RAM. Det er snarere et nød- eller mellemlag mellem RAM og SSD, end en måde at 'tilføje hukommelse' uden konsekvenser.

Projektet er også bundet til den officielle NVIDIA-stak med CUDA. Nouveau/Nova er ikke egnede til dette, da libcuda.so.1 kræves. Phoronix bemærker også, at NBD-VRAM er designet specifikt til forbruger-NVIDIA GPU'er, hvor alternative tilgange gennem NVIDIA P2P API ikke fungerer.

I det store hele er NBD-VRAM en lille, men interessant systemhack til Linux: det laver ikke mirakler og erstatter ikke RAM-opgraderinger, men giver mulighed for at bruge inaktiv grafikkorthukommelse som en ekstra lagringsplads før SSD. For bærbare computere med loddet hukommelse og diskret RTX-grafik kan dette vise sig at være en praktisk måde at klare spidsbelastninger på uden straks at få applikationerne til at falde eller opleve en langsom opfattelse fra det langsomme lagermedie.

Kilde: linux.org.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster