Hybrid Grafiklösungen (Optimus) unter Linux

Hinweis: In dem Thema Hybrid Grafiklösungen (Optimus) unter Linux gibt es 2 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Da wir hier im Forum auch schon Fragen zu diesem Thema hatten, und in Zukunft wohl noch mehr erhalten werden, möchte ich hier mal die Zusammenfassung eines interessanten Artikels aus der Zeitschrift Linux User einstellen (Ausgabe 08.2011).


    Zur Erklärung der Funktionsweise :
    Das Prinzp bei Optimus basiert darauf, dass bei Laptops im laufenden Betrieb, je nach Bedarf, zwischen zwei Grafikarten umgeschaltet wird. Diese werden als dGPU bzw iGPU bezeichnet, wobei die iGPU den leistungsschwächeren Chipsatz hat. Dies ermöglicht im Akkubetrieb merklich längere Laufzeiten.


    Zum Test :
    Hardware : Schenker M4S XMG a700 (ohne Möglichkeit der Einstellung im BIOS)
    Betriebssystem : Linux Mint Debian Edition / Kernel 2.6.38-2 / X.org 1.10.1


    Das System erkennt beim Hochfahren beide Grafikarten, wählt aber grundsätzlich den Intel Treiber aus. Die naheliegende Idee, das Laden des nouveau bzw des nvidia Treibers zu erzwingen scheitert.
    Es gibt unter Linux mittlerweile die Möglichkeit die unbenutzte dGPU komplett abzuschalten Auch das manuelle Umschalten der GPUs ist mittlerweile möglich. Es gibt ein sehr junges Projekt, genannt Bumblebee, was die automatische Umschaltung, genauso wie unter Windows, ermöglichen soll.


    Mittlerweile existiert ein spezielles Kernelmodul, welches es ermöglicht, die dGPU komplett abzuschalten. Dazu muss man zunächt das Programmverzeichnis acpi_call mittels

    Code
    git clone http://github.com/mkottman/acpi_call.git


    herunterladen. Das Paket git ist dafür Voraussetzung.
    Danach kompiliert man das Modul mittels

    Code
    make


    und lädt das Modul mittels :

    Code
    insmod acpi_call.ko


    Danach kann man durch Ausführen von :

    Code
    ./test_off.sh


    testen, ob eine der vorgesehenen Methoden funktioniert. Auf dem Testrechner war dies nicht der Fall. Es ist aber immer ratsam vorher das Kernelmodul des nouveautreibers zu deaktivieren, indem man in der Datei

    Code
    /etc/modprobe.d/blacklist.conf


    am Ende die Zeile

    Code
    blacklist nouveau


    hinzufügt und einen Neustrart durchführt. Funktioniert das, kann man das dauerhaft konfigurieren.
    Link hierzu : http://robbyx.net/blog/?p=190



    Eine weitere Möglichkeit, ist die Software Switcheroo. Diese ermöglicht das "harte" Umschalten zwischen den Grafikkarten. Die Grundlagen dafür sind schon im Kernel 2.6.35 vorhanden. Ob der Kernel mit Switcheroo kompiliert wurde, kann man mit

    Code
    sudo grep -i switcheroo /boot/config-2.6.*


    herausfinden. Da Switcheroo auf das Kernel Debug System zurückgreift, muss man sicherstellen, dass in der Datei

    Code
    /etc/fstab


    die Zeile

    Code
    none /sys/kernel/debug debugfs defaults 0 0


    eingetragen ist. Falls die nicht der Fall ist, muss diese nachgetragen werden und ein Neustart durchgeführt werden.
    Falls im Verzeichnis

    Code
    /sys/kernel/debug/


    noch kein Unterverzeichnis

    Code
    vgaswitcheroo


    existiert, muss man bei der Option

    Code
    GRUB_CMDLINE_LINUX_DEFAULT


    in der Datei

    Code
    /etc/default/grub


    den Parameter

    Code
    modset=1


    setzen. Danach muss man, um den Bootloader zu aktualisieren

    Code
    grub-update
    grub-install BOOTDEVICE


    im Terminal absetzen. Danach einen Neustart durchführen.
    Nun kann man mittels

    Code
    sudo echo DDIS > /sys/kernel/debug/vga-switcheroo/switch


    auf die dGPU umschalten. Dabei sollte kein X-Server laufen. Den aktuellen Switchstatus kann man ebenfalls in der Datei switch überprüfen.
    Möchte man diese Option dauerhaft aktivieren, muss man sie in die Datei

    Code
    /etc/rc.d/rc.local


    eintragen.
    Switcheroo benötigt den nouveau Treiber (nvidia Treiber, falls vorhanden, deinstallieren).
    Der Tester musste in diesem Test das Kernelmodul explizit nach Switcheroo laden, indem er es in

    Code
    /etc/modbrobe.d


    auf die Blacklist setzte und stattdessen in

    Code
    /etc/modules


    eintrug.
    Laut Aussage des Verfassers des originalen Artikels, ist auch asus-switcheroo (nicht nur für Asus Besitzer) einen Blick wert.



    Das Projekt Bumblebee ist relativ neu und setzt auf VirtualGL. Es eignet sich für Laptops, die keinen Hardwareswitch (Multiplexer) haben und somit Probleme mit Switcheroo. Es setzt den proprietären Grafiktreiber von nvidia voraus.
    Zuerst erfolgt ein klonen mittels

    Code
    https://github.com/MrMEEE/bumblebee


    Darin führt man dann

    Code
    ./install.sh


    aus. Bei Bumblebee müssen Programme, die auf die dGPU angewiesen sind, noch speziell aufgerufen werden. Ausserdem laufen beide GPUs dauerhaft. Aber dieses Projekt ist in reger Entwicklung.
    VORSICHT bei Version 1.4.31. Ein fataler Fehler im Deinstalltionsskript sorgt dafür, dass beim Deinstallieren das komplette Verzeichnis /usr gelöscht wird. In späteren Versionen ist dieser Fehler behoben.


    Links zu diesem Thema :
    http://linux-hybrid-graphics.blogspot.com/
    https://launchpad.net/~hybrid-graphics-linux
    http://hybrid-graphics-linux.tuxfamily.org/




    Dies soll keine Schritt für Schritt Anleitung zur Inbetriebnahme für Optimus ein, vielmehr wollte ich hier nur aufzeigen, welche Möglichkeiten es gibt, Hybrid Grafiksysteme eventuell zur Mitarbeit zu überreden.
    Ausserdem wollte ich den Besitzern solcher Laptops zeigen, dass es durchaus Grund gibt positiv in die Zukunft zu blicken.


    Bei Fragen wendet Euch bitte an den Hersteller Eures Laptops.

  • Mal ein kleines Update zwischendurch :
    Ein sehr interessanter Artikel zu diesem Thema ist in der Ausgabe 02/12 des c't Linux Magazins.
    Dieser gibt einen sehr guten Einblick über den aktuellen Stand und die Konfiguration von Bumblebee.


    http://www.heise.de/open/meldu…-Linux-02-12-1629674.html


    Werde das mal bei Gelegenheit zusammenfassend hier reinstellen.


    Nur noch eine kleine Ergänzung :
    Da die Vorgängerversionen von Bumblebee 3 einen anderen Ansatz verfolgten, als die aktuelle Version (diese nutzten ACPI-Calls zum Ein- und Ausschalten) und da der Gründer des Projektes Martin Juhl (auch bekannt als MrMEEE) den alten Ansatz für besser hält, hat er vor den älteren Bumblebee Code als fork unter dem Namen Ironhide weiterzuentwickeln.