Leistung nach Bedarf, das verspricht die Optimus-Technologie von Nvidia. Aber die Notebook-Hersteller boykottieren Linux – darum hilft sich die Community selbst.
Im Februar 2010 stellte Nvidia die Technologie Optimus offiziell vor [1]. Die Idee dahinter besticht: Moderne Laptops verwenden häufig neben der eingebauten Grafikkarte (dGPU) recht potente Hardware im Chipsatz (iGPU). Durch geschicktes Verschalten und mit passenden Treibern wechselt das System je nach Bedarf für den Benutzer unbemerkt zwischen beiden hin und her. Die dGPU übergibt im Akkubetrieb an die iGPU, was die Laufzeit merklich verlängert [2].
Mittlerweile haben andere Hersteller die Idee von Optimus [3] übernommen und so populär gemacht: In den meisten neuen Notebooks mit einer der dGPU/iGPU-Kombinationen Intel/Nvidia, Nvidia/Nvidia, Intel/ATI und ATI/ATI findet sich heute Optimus. Allerdings unterstützen die Notebook-Hersteller bisher Linux nicht, und auch der X-Server und der freie Treiber Nouveau vermögen Optimus-verschaltete Hardware bisher nicht richtig anzusprechen.
Warnhinweis
Die meisten der in diesem Artikel vorgestellten Operationen setzen Root-Rechte voraus und greifen tief ins System ein. Es empfiehlt sich, ein Rettungssystem wie Grml auf CD oder auf USB-Stick bereitzulegen. Auf jeden Fall aber sollten Sie vor allen Experimenten ein Backup des Systems machen.
Experimentelles
Als ein typischer Laptop mit Optimus-Grafik dient in unserem Test ein Schenker M4S XMG A700 mit Intel-Core-i5-Prozessor und Nvidia GT 425M (Abbildung 1). Dieses Gerät erlaubt im Gegensatz zu anderen Modellen nicht mehr, das Optimus-Setting über eine BIOS-Einstellung zu beeinflussen – was darauf hinweist, dass die dGPU nicht mehr physikalisch mit den Grafikausgängen zusammenhängt [4].
Mit einer aktuellen Distribution – wir verwendeten Linux Mint Debian Edition, das nach einem Update mit aktueller Software wie Kernel 2.6.38-2 und X.org 1.10.1 läuft – zeigt das Testmodell folgendes, Optimus-typisches Verhalten: Alles funktioniert ohne Probleme, aber ein Blick in die Logdatei des X-Servers (/var/log/Xorg.0.log) zeigt, was beim Hochfahren geschehen ist: Das System erkennt beide Grafikeinheiten und wählt grundsätzlich den Intel-Treiber aus.
Dass es die Nvidia-Karte nicht anspricht, zeigt sich zum Beispiel dadurch, dass die Software Nvidia-settings abbricht. Es läge die Idee nahe, den X-Server zum Laden des freien Treibers (nouveau) oder auch des proprietären Treibers (nvidia) zu zwingen, indem Sie ein entsprechendes Setting mit der Bus-ID der anderen Grafikeinheit in /etc/X11/xorg.conf oder unter /usr/share/X11/xorg.conf.d/ anlegen. Jeder entsprechende Versuch scheitert aber, indem der X-Server beim Hochfahren abbricht (No screens found) – ganz so einfach funktioniert es also nicht.
Unter Linux gibt es mittlerweile die Möglichkeit, die unbenutzte dGPU komplett abzuschalten, was einen maßgeblichen Zuwachs an Laufzeit im Akkubetrieb erbringt. Darüber hinaus klappt das manuelle Umschalten zwischen den GPUs. Optimus auch unter Linux automatisch im fließenden Übergang mit Abschaltung zu nutzen, so wie es eigentlich vorgesehen ist und auf aktuellen Windows-Systemen läuft, steckt jedoch noch in einer sehr frühen Phase der Entwicklung (siehe Kasten “Virtuell”).
Wer sich mit Optimus auseinandersetzt, für den bieten vor allem das Blog Linux-Hybrid-Graphics [5] und die Mailing-Liste Hybrid Graphics Linux auf Launchpad [6] Informationen und Kontakt zu Mitstreitern. Außerdem existiert seit kurzem ein aufgeräumtes Wiki zu dem Thema [7].
Via Kernel
Es gibt mittlerweile ein spezielles Kernel-Modul, mit dem Sie mithilfe von ACPI-Methoden die dGPU ganz abschalten [8]. Dafür laden Sie zunächst das Programmverzeichnis acpi_call mittels des folgenden Aufrufs herunter:
$ git clone http://github.com/mkottman/acpi_call.git
Das setzt das Paket git voraus. Wechseln Sie in das Verzeichnis, kompilieren Sie das Modul mit make, laden Sie es mittels insmod acpi_call.ko, und sehen Sie dann mit ./test_off.sh nach, ob auf der Hardware eine der vorgesehenen Methoden funktioniert. Auf dem Testmodell war das nicht der Fall.
Es ist hierbei auf jeden Fall eine gute Idee, vorher das Kernel-Modul des Nouveau-Treibers zu deaktivieren, indem Sie der Datei /etc/modprobe.d/blacklist.conf die Zeile blacklist nouveau am Ende hinzufügen und anschließend neu starten. Funktioniert eine der Methoden, konfigurieren Sie das dauerhaft [9]. Die Entwickler nehmen Fehlerberichte für die Weiterentwicklung auf Launchpad entgegen [10].
Switcheroo
Die Software Switcheroo ermöglicht zumindest das harte (“delayed”) Umschalten auf Kernel-Basis zwischen den installierten Grafikeinheiten. Bereits in Kernel 2.6.35 findet sich dafür die Grundlage [11]. Ob der laufende Kernel mit Switcheroo kompiliert wurde – was weitgehend der Fall sein dürfte – ermitteln Sie über folgenden Aufruf:
$ sudo grep -i switcheroo /boot/config-2.6.*
Switcheroo kommuniziert über das Debug-System des Kernels. Das setzt voraus, dass in der Datei /etc/fstab die Zeile none /sys/kernel/debug debugfs defaults 0 0 steht. Falls diese fehlt, tragen Sie sie nach und starten erst einmal das System neu.
Findet sich anschließend im Verzeichnis /sys/kernel/debug/ noch kein Unterverzeichnis vgaswitcheroo, tragen Sie bei der Option GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub den Parameter modset=1 ein. Danach setzen Sie die Befehle grub-update und grub-install Bootdevice in einem Terminal ab und starten neu. Nun schalten Sie zum Beispiel für das nächste Hochfahren des X-Servers mit folgenden Befehl auf die dGPU um [12]:
$ sudo echo DDIS > /sys/kernel/debug/vga-switcheroo/switch
Es empfiehlt sich, den X-Server für das Umschalten herunterzufahren. Den aktuellen Switchstatus überprüfen Sie ebenfalls in der Datei switch. Möchten Sie Optionen dauerhaft setzen, empfiehlt es sich, sie in die Datei /etc/rc.d/rc.local einzutragen [13].
Grundsätzlich benötigt Switcheroo den Nouveau-Treiber, sodass Sie gegebenenfalls den proprietären Nvidia-Treiber deinstallieren müssen, der mit diesem kollidiert. Im Test mussten wir außerdem das Kernel-Modul nouveau explizit nach Switcheroo laden, indem wir es in /etc/modprobe.d blacklisteten (siehe oben), dafür aber in /etc/modules eintrugen. Nicht nur für Asus-Besitzer lohnt es sich bei Switcheroo übrigens, asus-switcheroo genauer unter die Lupe zu nehmen [14].
Virtuell
Unter dem Namen Bumblebee [15] findet sich ein relativ neues Optimus-Projekt, das auf VirtualGL aufsetzt. Die Namenswahl beweist Humor: Bumblebee ist die rechte Hand von Optimus Prime, einem Roboter aus dem fiktionalen Transformers-Universum.
Der Ansatz des Bumblebee-Projekts eignet sich besonders für Laptops, die keinen Hardware-Switch (“Multiplexer”) besitzen und deshalb mit Switcheroo Schwierigkeiten haben (wie das Testgerät). Bumblebee setzt den proprietären Nvidia-Treiber voraus (Paket nvidia-glx). Debian, Ubuntu und Mint bieten diesen direkt nach der Installation automatisch an. Um die eigentliche Software zu installieren, klonen Sie mittels Git das Verzeichnis https://github.com/MrMEEE/bumblebee, und führen darin dann ./install.sh aus.
Obwohl der Einsatz von virtuellen Screens grundsätzlich ein “weiches” Umschalten wie unter Windows ermöglicht, müssen Sie Programme, die auf Unterstützung durch die dGPU angewiesen sind, bisher noch speziell aufrufen. Außerdem laufen hier bisher immer noch beide GPUs dauerhaft. Es tut sich zur Zeit aber gerade bei diesem vielversprechenden Projekt eine ganze Menge.
Bei der vielen Arbeit hat sich aber in Version 1.4.31 der Software ein fataler Bug ins Skript zum Deinstallieren der Software eingeschlichen [16], durch den Sie das Verzeichnis /usr komplett löschen [17]. Dieser Fehler findet sich, wurde aber mittlerweile in der Folgeversion 1.4.32 behoben.
Fazit
Wer derzeit einen neuen Laptop kauft, dem steht höchstwahrscheinlich eine Begegnung mit Optimus ins Haus. Verfügt dieser über keinen BIOS-Switch, um Optimus abzustellen (“Compatibility mode”), dann helfen nur Lösungen wie die hier vorgestellten weiter, wenn Sie entweder die Hardware voll ausreizen oder zumindest Überflüssiges abstellen möchten.
Dabei funktioniert aber in der Regel nur eine Auswahl der angebotenen Lösungen. Da die Sache nicht nur eine Minderheit von Benutzern betrifft, wird aber in Bezug auf Optimus kräftig weiterentwickelt. Spätestens, wenn sich der X-Server auf hybride Grafik versteht oder Nouveau nachzieht, hat sich das Problem wieder erledigt. Bis dahin dürften aber noch einige Monate ins Land gehen
Glossar
-
iGPU
-
Integrated Graphics Processing Unit. Auch als Onboard-Grafik bezeichneter, im Chipsatz integrierter Grafikprozessor.
-
dGPU
-
Dedicated / Discrete Graphics Processing Unit. Meist auch bei Laptops als Grafikkarte bezeichneter, dedizierter Grafikprozessor
Infos
[1] “World, meet Optimus”: http://blogs.nvidia.com/2010/02/world-meet-optimus/
[2] Intel HD-Graphics: http://www.intel.com/technology/graphics/intelhd.htm
[3] Optimus-Whitepaper: http://www.nvidia.com/object/LO_optimus_whitepapers.html
[4] Hardware-Multiplexing bei Optimus: http://tinyurl.com/3paueem
[5] Linux Hybrid Graphics Blog: http://linux-hybrid-graphics.blogspot.com/
[6] Mailingliste Hybrid Graphics Linux: https://launchpad.net/~hybrid-graphics-linux
[7] Optimus-Wiki: http://hybrid-graphics-linux.tuxfamily.org/
[8] Acpi_calls: http://linux-hybrid-graphics.blogspot.com/2010/07/using-acpicall-module-to-switch-onoff.html
[9] Ubuntu 10.10 auf Asus U35JC, #3: http://robbyx.net/blog/?p=190
[10] Bug #752542 auf Launchpad: https://bugs.launchpad.net/lpbugreporter/+bug/752542
[11] Switcheroo in Kernel 2.6.35: http://tinyurl.com/2vkdnqw
[12] Switcheroo und Ubuntu: https://help.ubuntu.com/community/HybridGraphics
[13] Switcheroo auf Asus M51TA: http://tinyurl.com/3qdvkeb
[14] Asus-switcheroo: https://github.com/awilliam/asus-switcheroo
[15] Bumblebee: http://www.martin-juhl.dk/2011/05/optimus-on-linux-problem-solved/
[16] Bumblebee-Bug: https://github.com/MrMEEE/bumblebee/commit/a047be
[17] “Epic Fail”: http://suckup.de/2011/06/20/epic-fail-bumblebee/







Danke für diesen sehr informativen und gut strukturierten Artikel. Ich werde später testen, ob ich mein ewiges Problem mit Optimus doch noch beheben kann.