NBD-VRAM veröffentlicht

Ein Open-Source-Projekt wurde veröffentlicht NBD-VRAM, das einen Teil des Videospeichers der NVIDIA-GPU als Swap-Speicher in Linux nutzt. Das Projekt richtet sich vor allem an Laptops mit fest verlötetem RAM, wo der RAM nicht erweiterbar ist, aber ein diskreter NVIDIA RTX/GTX-Grafikprozessor mit nicht genutztem VRAM vorhanden ist. Der Code ist in C und Shell geschrieben und unter einer Lizenz veröffentlicht MIT.

Die Idee von NBD-VRAM ist einfach: Wenn das System bereits beginnt, auf SSD-Swap zu gehen, kann man einen weiteren Zwischenschicht vor die SSD setzen – den Videospeicher. Der Autor gibt ein Beispiel mit einem Laptop auf RTX 3070 Laptop: Von 8 GB VRAM wurden 7 GB für Swap reserviert, sodass insgesamt mit RAM, zram und SSD-Swap das System etwa 46 GB adressierbaren Speichers erhielt. Die vermutete Overflow-Reihenfolge ist wie folgt: Zuerst wird RAM verwendet, dann VRAM als schneller Swap, dann zram, und erst danach die SSD.

Technisch fügt NBD-VRAM keinen neuen Kernel-Treiber hinzu. Ein kleiner Daemon weist den Videospeicher über CUDA Driver API, dann wird er dem Linux-Kernel als Blockgerät über NBD — Network Block Device — über ein Unix-Socket bereitgestellt. Nach der Verbindung mit dem Standard-nbd-client erscheint das Gerät /dev/nbdX im System, das wie ein gewöhnlicher Swap mit mkswap formatiert und mit swapon aktiviert werden kann.

Der Autor hebt hervor, dass dieser Ansatz aufgrund der Einschränkungen bei den Verbraucher-Grafikkarten von NVIDIA gewählt wurde. Ein direkterer Weg über die NVIDIA P2P API auf GeForce führe laut ihm zu einem EINVAL, da die entsprechenden Funktionen tatsächlich nur für professionelle und Server-Modelle verfügbar sind. Auch der Ansatz mit dem direkten Zugriff auf BAR1 funktionierte nicht: Es ist nur ein kleiner Bereich verfügbar, und das Lesen aus dem restlichen Teil liefert nur Nullen. Der NBD-Ansatz umgeht diese Einschränkung, da er die normalen CUDA-Kopieroperationen cuMemcpyHtoD und cuMemcpyDtoH verwendet.

Funktionen

  • Die Verwendung von VRAM als regulärem Linux-Swap. Nach dem Start stellt der Daemon den Videospeicher als /dev/nbd0 oder als 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 das Schreiben, Kompilieren und Warten eines separaten Kernelmoduls, nutzt keine internen Symbole des NVIDIA-Treibers und sollte Kernel- und Treiberaktualisierungen ohne erneute Kompilierung überstehen.

  • Orientierung an Verbraucher-Grafikkarten von NVIDIA. Die Anforderungen beinhalten NVIDIA-GPUs mit CUDA-Unterstützung, einschließlich der Consumer RTX/GTX-Karten, den offiziellen NVIDIA-Treiber mit libcuda.so.1, das nbd-Modul 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 vram-swap-nbd-Dienst hinzu, der über systemctl gestartet werden kann; nach der Installation wird der Dienst so konfiguriert, dass er beim Booten automatisch startet.

  • Konfigurierung der Swap-Größe und Priorität. Im systemd-Einheit kann VRAM_SETUP_SIZE_MB festgelegt werden, also die obere Grenze des zugewiesenen VRAM, und VRAM_SWAP_PRIORITY, also die Priorität des Swap-Geräts. Je höher die Priorität, desto früher wird Linux diese Swap-Schicht verwenden.

  • Automatische Reduzierung der angeforderten Größe. Wenn der benötigte VRAM nicht verfügbar ist, versucht der Daemon, die Größe in Schritten von 512 MiB zu reduzieren, um dennoch den verfügbaren Speicher zuzuweisen, beispielsweise wenn ein Teil des Speichers bereits vom Compositor oder einer grafischen Sitzung belegt ist.

  • Test-Szenarien. Im Repository gibt es test-nbd.sh für einen Smoke-Test mit Schreiben/Lesen von 1 MiB und test-fill.sh für einen Stresstest des gesamten VRAM-Abschnitts.

  • Die angegebene Leistung beträgt etwa 1,3 GB/s. Mit der RTX 3070 Laptop wurde eine sequentielle Schreibgeschwindigkeit von 7 GB in 4 MB Blöcken von etwa 1,3 GB/s gemessen.

Anwendungsszenarien

Notebooks mit verlöteter RAM. Das Hauptszenario sind moderne Laptops, bei denen 16 oder 32 GB RAM bereits nicht mehr ausreichen, aber eine Erweiterung nicht möglich ist. Wenn ein solcher Computer über eine dedizierte RTX-Karte verfügt, kann ein Teil des VRAM als zusätzlicher Swap-Speicher verwendet werden. Das verwandelt VRAM nicht in vollwertigen RAM, kann aber das System vor einem abrupten Wechsel auf langsamen SSD-Swap oder OOM-Killer bei Spitzenlasten bewahren.

Ressourcenintensive Arbeitsumgebungen für Entwickler. IDE, Browser mit Dutzenden von Tabs, Docker-Container, lokale Datenbanken, das Kompilieren großer Projekte und Testumgebungen erzeugen leicht vorübergehende Spitzen im Speicherbedarf. In einem solchen Szenario kann NBD-VRAM als Puffer fungieren: Es beschleunigt nicht die normale Arbeit, sondern mildert den Moment, in dem der RAM ausgeht.

Entlastung des SSD-Swap. Wenn der Swap auf SSD häufig verwendet wird, ist das nicht nur langsamer, sondern erzeugt auch unnötige Schreibvorgänge auf dem Speicher. VRAM-Swap kann mit höherer Priorität gesetzt werden, sodass das System bei einem RAM-Überlauf zuerst Seiten in den Videospeicher auslagert und erst danach auf die SSD zugreift. Dies ist besonders relevant für Laptops, bei denen der SSD häufig nicht austauschbar oder teuer in der Ersetzung ist.

Kombination mit zram. Der Autor beschreibt direkt ein Schema, in dem der VRAM-Swap eine höhere Priorität erhält und zuerst "überlaufende" Speicherseiten verarbeitet, während zram als nächster Schritt verwendet wird und die SSD die letzte Verteidigungslinie bleibt. Dieses Schema kann für Workstations und Laptops nützlich sein, bei denen es wichtiger ist, die Reaktionsfähigkeit des Systems bei speicherengpässen zu bewahren, als maximale Vorhersagbarkeit der Latenzen zu erzielen.

Lokale AI/LLM-Aufgaben rund um die GPU, jedoch nicht anstelle von VRAM für das Modell. NBD-VRAM erhöht den für die CUDA-Anwendung verfügbaren Videospeicher nicht als VRAM für das Modell. Dies ist ein umgekehrtes Szenario: Nicht RAM wird als VRAM verwendet, sondern VRAM wird als Swap für den normalen Linux-Speicher genutzt. Daher ermöglicht das Projekt nicht, ein größeres Modell direkt in die GPU zu laden. Es kann jedoch nützlich sein auf einem System, wo neben dem LLM-Inferenz-Browser, IDEs, Indexierern, Python-Umgebungen und Containern gearbeitet wird, und der Systemspeicher beginnt zu schwinden.

Home- und Experimentier-Arbeitsstationen. Das Projekt ist für Benutzer interessant, deren Grafikkarte oft außerhalb von Spielen, Rendern oder ML-Aufgaben ungenutzt bleibt. Zum Beispiel können 8–12 GB VRAM auf einer Desktop-GeForce temporär in eine zusätzliche Swap-Schicht für intensive Aufgaben wie Kompilierung, Datenverarbeitung oder Ausführung umgewandelt werden. virtuellen Maschinen.

Einschränkungen

NBD-VRAM ist kein Ersatz für den Arbeitsspeicher. Der Zugriff auf solches Swap erfolgt über eine Kette von kernel swap → /dev/nbdX → nbd-Treiber → Unix-Socket → Daemon → CUDA-Kopie → VRAM, daher werden Verzögerungen und Verhalten anders sein als bei echtem RAM. Es ist eher eine Notfall- oder Zwischenschicht zwischen RAM und SSD, als eine Methode, um „Speicher“ ohne Konsequenzen hinzuzufügen.

Das Projekt basiert auch auf dem offiziellen NVIDIA-Stack mit CUDA. Nouveau/Nova sind dafür nicht geeignet, da libcuda.so.1 erforderlich ist. Phoronix stellt auch fest, dass NBD-VRAM speziell für Verbraucher-GPU von NVIDIA entwickelt wurde, bei denen alternative Ansätze über die NVIDIA P2P-API nicht funktionieren.

Zusammenfassend ist NBD-VRAM ein kleiner, aber interessanter System-Hack für Linux: Er bewirkt keine Wunder und ersetzt kein Upgrade des RAM, ermöglicht aber die Nutzung von ungenutztem Videospeicher als zusätzliche Swapeinheit vor der SSD. Für Laptops mit integriertem Speicher und einer diskreten RTX-Grafikkarte kann dies eine praktische Methode sein, um Spitzenlasten zu bewältigen, ohne dass Anwendungen sofort abstürzen oder schmerzhaft auf ein langsames Speichermedium umschalten.

Quelle: linux.org.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster