ubuntuusers.de

primus - ein Nachbrenner für Bumblebee

software.png

primus soll die Leistung der Nvidia-GPU auf Optimus-Laptops verbessern. Dabei ersetzt primus das von Bumblebee genutzte Backend namens VirtualGl. Ikhaya führte ein Gespräch mit dem primus-Entwickler Alexander Monakov.

primus wurde von Alexander Monakov entwickelt um die Leistung der Nvidia GPU auf Optimus-Laptops zu verbessern: primus ersetzt das von Bumblebee genutzte Backend VirtualGl 🇬🇧 .

Außer der Möglichkeit selbst zu kompilieren, ist primus auch als Deb-Paket für Ubuntu erhältlich (PPA). Es existiert der Entwurf für eine GUI (siehe libgl-switcheroo 🇬🇧), die den Anwender fragt ob ein Programm (wenn dieses die OpenGL-Bibliothek lädt) auf der Intel- oder der Nvidia-GPU ausgeführt werden soll und sich die Entscheidung für zukünftige Starts bei Bedarf auch merkt.

Im Moment ist diese GUI noch im Alpha-Stadium und braucht Zuwendung: Interessierte dürfen sich gerne bei amonakov im IRC auf freenode in #bumblebee melden.

Magst Du Dich vorstellen?

Ich bin 25 Jahre alt, Doktorand am Institute for System Programming 🇬🇧 in Moskau, wo ich an Software-Optimierung, Compiler-Technologien und GPGPU-Computing arbeite. Kurz: mein Job ist es, Software schneller zu machen.

Vor über zehn Jahren gewann ich meine erste Linuxdistribution als Preis in einem Programmierwettbewerb: Altlinux, eine Distribution von russischen Entwicklern, die damals schon sehr interessant war und es immer noch ist. Mittlerweile, nach ein paar Jahren mit Debian und Ubuntu, nutze ich aber Gentoo und Arch Linux.

Kannst Du unseren Lesern primus erläutern?

Bumblebee ist modular aufgebaut: Da ist einmal das Kernel-Modul zum An- und Abschalten der diskreten GPU (bbswitch), dann der Daemon zum Starten eines 2. X-Servers auf der dGPU (bumblebeed), und ein Client, optirun, der Programme so startet, dass OpenGL Rendering auf dem 2. X-Server stattfindet und komplette Frames auf den 1. X-Server zur Darstellung zurückkopiert werden.

Für dieses Offloading benutzt optirun VirtualGL, wobei VirtualGL eigentlich für andere Einsatzbereiche konzipiert wurde: Beispielsweise um eine 3D-Modelling-Software auf einem anderen Computer/X-Server zu betreiben und die Frames über einen Netzwerk Layer, teilweise komprimiert, zum 1. X-Server zu kopieren. Das ist alles unnötig für Hybrid Graphics, da sich beide X-Server auf demselben Computer befinden.

Ich mag es Dinge zu optimieren und erkannte, dass ohne unnötiges Kopieren von Frames die Leistung von Bumblebee erheblich gesteigert werden konnte. Anfangs hatte ich an ein Plugin für VirtualGL gedacht, nachdem ich mich aber in den Quellcode von VirtualGL eingelesen hatte, kam ich zu der Überzeugung, dass es die bessere Herangehensweise war, alles von Grund auf neu zu schreiben. OpenGL Offloading zu implementieren war keine so große Herausforderung und so stand das Konzept von primus: Ein überschaubares Projekt – realisierbar nach dem Feierabend und an Wochenenden.

Der erste Proof-of-Concept Code betrug 500 Zeilen, die aktuelle Version kommt auf knapp 850 Zeilen Code. An technischen Details interessierte Leser werden hier 🇬🇧 fündig.

Primus scheint teilweise deutlich schneller zu sein als Bumblebee/VirtualGL?

Normalerweise verbessert sich die FPS Rate um den Faktor 1.5 - 2, da unnötiges Kopieren von Frames in den Framebuffer auf ein Minimum reduziert wird. Dies gänzlich zu vermeiden, wie es Dave Airlies PRIME handhabt, ist ohne DMA buffer-sharing nicht möglich.

Sind Nachteile im Vergleich zu Bumblebee/VirtualGL bekannt?

VirtualGL unterstützt einige selten genutzte OpenGL Funktionen, wie beispielsweise Single-buffered Windows, Color Index Rendering, und noch einige mehr. Primus verzichtet darauf, da sie von Spielen sowieso nicht genutzt werden. GLX-Extensions sind ebenso verzichtbar, wichtig sind nur OpenGL-Extensions. Unterstützung für einige der GLX-Extensions ist geplant.

Gibt es bekannte Probleme und können diese behoben werden?

Unter bestimmten Umständen gibt es Probleme bei Verwendung von primus mit Compositing Window Managern: Flackern von Anwendungen im Fenster (im Vollbildmodus gibt es das Problem nicht) oder langsamen Bildaufbau. Dieses Problem kann aber durch das Setzen des Modus PRIMUS_SYNC=1 umgangen werden. Ein ähnlich gelagertes Problem: das Abstürzen von manchen Anwendungen beim Schließen des Anwendungsfensters. Jemand mit Erfahrung im Bereich Compositing/X-Server wird noch gebraucht, um sich des Problems anzunehmen.

Welche Spiele wurden bisher erfolgreich mit primus getestet?

Ich teste mit den Humble Indie Bundles: Amnesia, Anomaly, Bastion, Braid, Cogs, Trine, Super Meat Boy. Zusätzlich noch Trine 2 und die Unigine 🇬🇧 Benchmarks. Jemand aus dem ArchLinux Forum testet zusätzlich Minecraft.

*Anmerkung: OpenArena, ET, Nexuiz, Quake4 wurden erfolgreich vom Autor getestet.

Können unsere Leser Dich beim Testen unterstützen?

Nichts spezielles. Benutzt primus einfach und meldet Fehler, wenn z.B. euer Lieblings-Scientific-Visualization-Tool nicht läuft wie es soll. Die besten Tests sind die Nutzung von Programmen, die euch wirklich wichtig sind.

Alexander, wir bedanken uns für das Gespräch!


Vielen Dank an realzippy für das Führen des Interviews!