Hybryda ujarzmiona! 13


optimusZ hybrydowymi układami graficznymi mamy do czynienia, gdy dwie lub więcej różnych kart korzysta z jednego (wspólnego) wyjścia wideo. Od kiedy Intel wprowadził układy graficzne zintegrowane z ich procesorami, jest to zjawisko niemalże powszechne w świecie laptopów. Niestety technologia ta sprawia wiele problemów użytkownikom Linuksa. Linuksiarze kierują pretensje (po części słusznie) do producentów kart graficznych, którzy czasami całkowicie ignorują problem (NVIDIA). Prawda jest jednak taka, że cały stos graficzny Linuksa nie był gotowy na tę technologię, a sterowniki to tylko jeden z problematycznych elementów. Wygląda na to, że jednak ten mroczny okres będziemy mieć wreszcie za sobą.

Największą przeszkodą w implementacji technologii hybrydowych na Linuksie jest chyba sam X-Server. Nie pozwala on na dynamiczne przełączanie wyświetlania między różnymi układami i przy każdej takiej zmianie wymaga swojego restartu. AMD zaimplementowało w swoich zamkniętych sterownikach (Catalyst) właśnie taką obsługę hybryd – zmiana karty graficznej wymaga restartu X’ów. Natomiast NVIDIA w ogóle nie zdecydowała się na implementacje Optimusa (hybrydowa technologia NVIDIA). Użytkownicy korzystają więc ze społecznościowego projektu Bumblebee. Działa on na tej zasadzie, że uruchamia 2 X-Servery jednocześnie (jeden na Intelu, a drugi na NVIDIA) i przenosi obraz z jednego na drugi przy pomocy VirtualGL. W praktyce jest to proteza, która powoduje znaczny spadek wydajności przy jednoczesnym wzroście zużycia energii (a w konsekwencji grzania się laptopa). Ponadto nie obsługuje wielu nowych hybryd, w szczególności tych MUX-less.

Mało jednak osób zdaje sobie sprawę, że w świecie otwartego oprogramowania i Linuksa od pewnego czasu trwają prace nad kompleksowym rozwiązaniem tego problemu. W jądrze systemu zaimplementowano mechanizmy współdzielenia buforów między różnymi (otwartymi) sterownikami – DMA-BUF, a cały stos graficzny został znacząco przebudowany na potrzeby technologii hybrydowej. Całościowo nazywa się tę implementację PRIME. Wraz z wydaniem X-Server 1.13 i ostatnimi aktualizacjami otwartych sterowników wygląda na to, że wszystkie elementy są już na miejscu.

W związku z tym jeden z użytkowników forum Phoronix postanowił wypróbować PRIME. Ku swojemu własnemu zaskoczeniu wszystko ruszyło z kopyta. Oto link do udanej próby. Użytkownik w celach testowych zastosował Ubuntu 12.10 beta z włączonymi repozytoriami proposed oraz repozytorium xorg edgers. Tester posiada hybrydę Radeona z Intelem, a przełączanie między nimi realizuje przy pomocy zmiennej środowiskowej „DRI_PRIME”. Tak więc ustawiając:

DRI_PRIME=0
pracuje na grafice Intela, a zmieniając na:
DRI_PRIME=1
przeskakuje na układ AMD. Nie potrzeba przy tym żadnego restartu X-Servera! Trzeba pamiętać, że póki co te mechanizmy działają jedynie dla otwartych sterowników. Można mieć jednak nadzieję, że wraz z X-Serverem 1.13, twórcy zamkniętych modułów wreszcie bezproblemowo zaimplementują obsługę hybryd.

Samemu nie posiadam żadnego laptopa z układem hybrydowym, więc nie jestem w stanie zweryfikować tego doniesienia, ale zapraszam wszystkich do testów i dzielenia się ich wynikami w komentarzach.
 


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

13 komentarzy do “Hybryda ujarzmiona!

  • Ja__

    Działa!

    glxgears
    Running synchronized to the vertical refresh. The framerate should be
    approximately the same as the monitor refresh rate.
    299 frames in 5.0 seconds = 59.750 FPS
    298 frames in 5.0 seconds = 59.524 FPS
    298 frames in 5.0 seconds = 59.522 FPS

    DRI_PRIME=1 glxgears
    Running synchronized to the vertical refresh. The framerate should be
    approximately the same as the monitor refresh rate.
    6661 frames in 5.0 seconds = 1332.172 FPS
    7011 frames in 5.0 seconds = 1402.090 FPS
    6292 frames in 5.0 seconds = 1258.227 FPS

  • skandyn

    Dla mnie najważniejsze jest, że programik Bumblebee spisuje się bardzo dobrze i człowiek już się do tego tak przyzwyczaił, że jakieś automatyczne przełączanie nie jest mi potrzebne. Po prostu jaki to problem odpalić sobie jakąś grę w konsoli poleceniem np. optirun oilrush. Poza tym jakoś nie odczuwam specjalnych spadków wydajności lub przegrzewania się notebooka. Zresztą prawda jest taka, że od czasu do czasu tylko straszą, że rozwiążą problem z technologią Optimus pod Linuksem i tyle.

    Pozdrawiam.

  • aragami

    Hahaha faktycznie działa . Ubuntu 12.04 x64 plus repozytorium xorg edgers i śmiga . Dla porównania wynik karty geeforce 650m z komenda :
    aragami@pqsdb9:~$ optirun glxgears
    3514 frames in 5.0 seconds = 702.782 FPS
    2191 frames in 5.0 seconds = 437.958 FPS
    1351 frames in 5.0 seconds = 269.869 FPS
    830 frames in 5.0 seconds = 165.804 FPS
    886 frames in 5.0 seconds = 177.185 FPS
    1164 frames in 5.0 seconds = 232.779 FPS
    1871 frames in 5.0 seconds = 374.163 FPS

    a tutaj miła niespodzianka 🙂

    aragami@pqsdb9:~$ DRI_PRIME=1 glxgears
    4051 frames in 5.0 seconds = 810.117 FPS
    4300 frames in 5.0 seconds = 859.961 FPS
    4839 frames in 5.0 seconds = 967.622 FPS
    4243 frames in 5.0 seconds = 848.527 FPS
    4267 frames in 5.0 seconds = 853.205 FPS
    4259 frames in 5.0 seconds = 851.667 FPS
    4270 frames in 5.0 seconds = 853.912 FPS
    4260 frames in 5.0 seconds = 851.970 FPS

  • Kalten

    Ja niestety uważam, że nie jest to jeszcze kompletne rozwiązanie problemu. Co prawda faktycznie glxgears pokazuje ogromny wzrost kl/s lecz bateria w moim lapku (DELL Inspiron Q15R, intel+gf-gt525m) na 12.10 trzyma około 2h a na 12.04 z zainstalowanym bumblebee około 4h. Wniosek taki, że dalej karta NVidii NIE jest wyłączona i ssie baterie. A przecież o to właśnie chodzi w hybrydach, aby wydłużyć czas pracy lapka na baterii. Niestety nie jestem super-userem i nie wiem do końca jak to sprawdzić (jakim poleceniem?) aby mieć 100% pewności, że moje mongolskie teorie są słuszne 🙂

  • Coya

    Faktycznie działa…
    agusia@CoYa-GreenRaptor:~$ DRI_PRIME=1 glxgears
    Running synchronized to the vertical refresh. The framerate should be
    approximately the same as the monitor refresh rate.
    32489 frames in 5.0 seconds = 6497.760 FPS
    31148 frames in 5.0 seconds = 6229.485 FPS

    agusia@CoYa-GreenRaptor:~$ DRI_PRIME=0 glxgears
    Running synchronized to the vertical refresh. The framerate should be
    approximately the same as the monitor refresh rate.
    303 frames in 5.0 seconds = 60.444 FPS
    300 frames in 5.0 seconds = 59.974 FPS

    Ale:
    @Kalten
    Masz rację, karta nvidii nie zostaje fizycznie odłączona, i nadal pobiera energię.
    Jednakże nie pracując pod obciążeniem zużywa jej niewiele.
    Skąd wiem że karta nie jest fizycznie odłączana ? Ponieważ na moim laptopie są diody informujące która karta jest załączona, i zawsze pokazuje mi że obie karty pracują. (MSI GE40)

  • A

    Hmmm chyba czegoś nie rozumiem,

    Debian Jessie Intel I7 hd4000 i GTX 660M

    DIR_PRIME=1 podnosi znacznie wydajność ale czy na pewno przełącza karty? Dobrze rozumuję?

    $ DRI_PRIME=0 glxgears
    304 frames in 5.0 seconds = 60.798 FPS

    $ DRI_PRIME=1 glxgears
    32311 frames in 5.0 seconds = 6462.123 FPS

    $ DRI_PRIME=0 optirun -b primus glxgears
    306 frames in 5.0 seconds = 61.069 FPS

    $ DRI_PRIME=1 optirun -b primus glxgears
    13613 frames in 5.0 seconds = 2722.588 FPS

    $ DRI_PRIME=0 glxinfo | grep vendor
    server glx vendor string: SGI
    client glx vendor string: Mesa Project and SGI
    OpenGL vendor string: Intel Open Source Technology Center

    $ DRI_PRIME=1 glxinfo | grep vendor
    server glx vendor string: SGI
    client glx vendor string: Mesa Project and SGI
    OpenGL vendor string: Intel Open Source Technology Center

    $ DRI_PRIME=0 optirun glxinfo | grep vendor
    server glx vendor string: NVIDIA Corporation
    client glx vendor string: primus
    OpenGL vendor string: NVIDIA Corporation

    $ DRI_PRIME=1 optirun glxinfo | grep vendor
    server glx vendor string: NVIDIA Corporation
    client glx vendor string: primus
    OpenGL vendor string: NVIDIA Corporation