NBD-VRAM veröffentlicht

Ein veröffentlichtes Open-Source-Projekt NBD-VRAM, das es ermöglicht, einen Teil des Grafikspeichers der NVIDIA GPU als Swap-Speicher in Linux zu verwenden. Das Projekt richtet sich in erster Linie an Laptops mit fest verlötetem RAM, bei denen der RAM nicht erweitert werden kann, aber im System eine NVIDIA RTX/GTX-Grafikkarte mit ungenutztem VRAM vorhanden ist. Der Code ist in C und Shell geschrieben und wird unter der Lizenz veröffentlicht MIT.

Die Idee von NBD-VRAM ist einfach: Wenn das System bereits beginnt, auf SSD zu swapen, kann man ein zusĂ€tzliches Zwischenlayer vor der SSD einfĂŒgen — den Grafikspeicher. Der Autor fĂŒhrt ein Beispiel mit einem Laptop an RTX 3070 Laptop: Von 8 GB VRAM wurden 7 GB fĂŒr Swap reserviert, so dass das System insgesamt mit RAM, zram und SSD-Swap etwa 46 GB adressierbaren Speicher erhielt. Die vermutete Überlaufreihenfolge ist wie folgt: Zuerst wird RAM verwendet, dann VRAM als schneller Swap, dann zram und schließlich die SSD.

Technisch gesehen fĂŒgt NBD-VRAM keinen neuen Kernel-Treiber hinzu. Ein kleiner Daemon reserviert den Grafikspeicher ĂŒber CUDA Driver API, und ĂŒbergibt ihn anschließend dem Linux-Kernel als BlockgerĂ€t ĂŒber NBD — Network Block Device — ĂŒber einen Unix-Socket. Nach der Verbindung erscheint im System mit dem standardmĂ€ĂŸigen nbd-client /dev/nbdX, das wie ein gewöhnliches Swap mit mkswap partitioniert und mit swapon aktiviert werden kann.

Der Autor betont speziell, dass dieser Ansatz aufgrund der EinschrĂ€nkungen von Verbrauchergrafikkarten von NVIDIA gewĂ€hlt wurde. Ein direkterer Weg ĂŒber die NVIDIA P2P API bei GeForce stĂ¶ĂŸt, seiner Aussage nach, auf EINVAL, da die entsprechenden Möglichkeiten faktisch nur fĂŒr professionelle und Server-Modelle verfĂŒgbar sind. Die Variante mit direktem Zugriff auf BAR1 funktionierte ebenfalls nicht: Es war nur ein kleiner abgebildeter Bereich verfĂŒgbar, wĂ€hrend das Lesen aus dem restlichen Teil nullen zurĂŒckgibt. Der NBD-Ansatz umgeht diese EinschrĂ€nkung, da er gewöhnliche CUDA-Kopieroperationen cuMemcpyHtoD und cuMemcpyDtoH verwendet.

Funktionen

  • Verwendung von VRAM als gewöhnlicher Linux-Swap. Nach dem Start stellt der Daemon den Grafikspeicher als /dev/nbd0 oder ein anderes NBD-GerĂ€t zur VerfĂŒgung, das fĂŒr den Kernel wie ein standardmĂ€ĂŸiges BlockgerĂ€t aussieht.

  • Betrieb ohne eigenes Kernel-Modul. Das Projekt erfordert nicht, dass ein separates Kernel-Modul geschrieben, kompiliert und gewartet wird, verwendet keine internen Symbole des NVIDIA-Treibers und sollte Kern- und Treiber-Updates ohne Neuerstellung ĂŒberstehen.

  • Ausrichtung auf Verbrauchergrafikkarten von NVIDIA. In den Anforderungen sind NVIDIA-GPUs mit CUDA-UnterstĂŒtzung aufgefĂŒhrt, einschließlich der Verbraucher-RTX/GTX-Karten, des offiziellen NVIDIA-Treibers mit libcuda.so.1, des nbd-Moduls im Linux-Kernel, nbd-client, gcc und make. Das CUDA Toolkit ist dabei nicht erforderlich.

  • systemd-Integration. Die Installation ĂŒber install.sh fĂŒgt den Dienst vram-swap-nbd hinzu, der ĂŒber systemctl gestartet werden kann; nach der Installation wird der Dienst fĂŒr den automatischen Start beim Booten aktiviert.

  • Konfiguration der GrĂ¶ĂŸe und PrioritĂ€t des Swap. In der systemd-Einheit können VRAM_SETUP_SIZE_MB, also die obere Grenze des zugewiesenen VRAM, und VRAM_SWAP_PRIORITY, also die PrioritĂ€t des Swap-GerĂ€ts, festgelegt werden. Je höher die PrioritĂ€t, desto frĂŒher wird Linux diese Swap-Schicht verwenden.

  • Automatische Reduzierung der angeforderten GrĂ¶ĂŸe. Wenn der erforderliche VRAM nicht verfĂŒgbar ist, versucht der Daemon, die GrĂ¶ĂŸe in Schritten von 512 MiB zu reduzieren, um trotzdem den verfĂŒgbaren Raum zuzuweisen, beispielsweise wenn ein Teil des Speichers bereits vom Kompositor oder einer grafischen Sitzung belegt ist.

  • Test-Skripte. Im Repository gibt es test-nbd.sh fĂŒr einen Smoke-Test mit Lese-/SchreibvorgĂ€ngen von 1 MiB und test-fill.sh fĂŒr einen Stresstest des gesamten VRAM-Volumes.

  • Die angegebene Leistung betrĂ€gt etwa 1,3 GB/s. Auf der RTX 3070 Laptop hat der Autor sequentielle SchreibvorgĂ€nge von 7 GB in 4 MB-Blöcken mit einer Geschwindigkeit von etwa 1,3 GB/s gemessen.

Anwendungsszenarien

Laptops mit verlöteter RAM. Das Hauptszenario sind moderne Laptops, bei denen 16 oder 32 GB RAM bereits nicht ausreichen, aber eine Erweiterung unmöglich ist. Wenn in einem solchen GerÀt eine dedizierte RTX-Karte vorhanden ist, kann ein Teil des VRAM als zusÀtzliche Swap-Schicht genutzt werden. Dies verwandelt den VRAM nicht in vollwertigen RAM, kann jedoch das System vor dem abrupten Umgehen auf langsames SSD-Swap oder vor OOM-Killer bei Spitzenlasten retten.

Ressourcenintensive Entwicklungsumgebungen. IDE, Browser mit Dutzenden von Tabs, Docker-Container, lokale Datenbanken, Builds großer Projekte und Testumgebungen verursachen leicht vorĂŒbergehende Spitzen im Speicherverbrauch. In diesem Szenario kann NBD-VRAM als Puffer arbeiten: nicht die normale Arbeit beschleunigen, sondern den Moment mildern, wenn der RAM aufgebraucht ist.

Reduzierung der Belastung des SSD-Swaps. Wenn Swap auf SSD hĂ€ufig verwendet wird, ist es nicht nur langsamer, sondern es erzeugt auch unnötige SchreibvorgĂ€nge auf dem Speicher. VRAM-Swap kann mit höherer PrioritĂ€t eingestellt werden, sodass das System bei RAM-Überlastung zuerst Seiten in den Videospeicher auslagert und erst dann auf die SSD zugreift. Dies ist besonders relevant fĂŒr Laptops, bei denen SSDs oft nicht austauschbar oder teuer in der Ersetzung sind.

Kombination mit zram. Der Autor beschreibt direkt ein Schema, bei dem VRAM-Swap höhere PrioritĂ€t erhĂ€lt und den ersten "Überlauf" des Speichers ĂŒbernimmt, zram wird auf der nĂ€chsten Ebene verwendet, und SSD bleibt die letzte Verteidigungslinie. Solch ein Schema kann nĂŒtzlich sein fĂŒr Workstations und Laptops, bei denen es wichtiger ist, die ReaktionsfĂ€higkeit des Systems bei Speichermangel zu bewahren, als maximale Vorhersagbarkeit der Latenzen zu erreichen.

Lokale AI/LLM-Aufgaben rund um die GPU, aber nicht anstelle von VRAM fĂŒr das Modell. NBD-VRAM erhöht nicht den fĂŒr CUDA-Anwendungen verfĂŒgbaren Videospeicher wie VRAM fĂŒr das Modell. Es handelt sich um ein umgekehrtes Szenario: nicht RAM wird als VRAM benutzt, sondern VRAM wird als Swap fĂŒr den normalen Linux-Speicher verwendet. Daher wird es nicht möglich sein, ein grĂ¶ĂŸeres Modell direkt in die GPU zu laden. Es kann jedoch nĂŒtzlich sein auf einer Maschine, auf der parall mit LLM-Inferenz Browser, IDEs, Indexer, Python-Umgebungen und Container arbeiten und der Systemspeicher zu Ende geht.

Heim- und experimentelle Workstations. Das Projekt ist interessant fĂŒr Nutzer, deren Grafikkarten hĂ€ufig außerhalb von Spielen, Rendering oder ML-Aufgaben im Leerlauf sind. Zum Beispiel kann man 8–12 GB VRAM auf einer Desktop-GeForce vorĂŒbergehend in eine zusĂ€tzliche Layer-Swap fĂŒr anspruchsvolle Aufgaben wie Kompilierung, Datenverarbeitung oder AusfĂŒhrung verwandeln. virtuelle Maschinen.

EinschrÀnkungen

NBD-VRAM ist kein Ersatz fĂŒr den Arbeitsspeicher. Der Zugriff auf solches Swap erfolgt ĂŒber die Kette Kernel-Swap → /dev/nbdX → nbd-Treiber → Unix-Socket → Daemon → CUDA-Kopie → VRAM, daher werden Latenzen und Verhalten von echtem RAM abweichen. Es handelt sich eher um eine Notfall- oder Zwischenebene zwischen RAM und SSD als um einen Weg, "Speicher ohne Folgen" hinzuzufĂŒgen.

Das Projekt basiert auch auf dem offiziellen NVIDIA-Stack mit CUDA. Nouveau/Nova sind dafĂŒr nicht geeignet, da libcuda.so.1 benötigt wird. Phoronix merkt auch an,, dass NBD-VRAM speziell fĂŒr Consumer-NVIDIA-GPUs geschaffen wurde, bei denen alternative AnsĂ€tze ĂŒber die NVIDIA P2P API nicht funktionieren.

Im Kern ist NBD-VRAM ein kleiner, aber interessanter System-Hack fĂŒr Linux: Er vollbringt keine Wunder und ersetzt kein RAM-Upgrade, ermöglicht jedoch die Nutzung ungenutzter Grafikspeicher als zusĂ€tzliche Swap-Ebene vor SSDs. FĂŒr Laptops mit verlöteter RAM und einer dedizierten RTX-Grafikkarte kann dies eine praktische Lösung sein, um Spitzenlasten zu bewĂ€ltigen, ohne sofortige AbstĂŒrze von Anwendungen oder schmerzhafte ÜbergĂ€nge zu langsameren Speichern zu erleben.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4