Drukuj
Nadrzędna kategoria: Ubuntu
Kategoria: Gotowe rozwiązania
Odsłony: 28359
Gwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywna
 
Obiecywałem napisać artykuł dla początkujących o instalacji pakietów w Ubuntu, ale ostatnio pochłonął mnie inny problem, którego rozwiązania napiszę tutaj. Dotyczy on grafiki Intel'a, Compiza i OpenGL. To trójca, która w takiej konfiguracji zazwyczaj daje o sobie znać. Popatrzmy jak można rozwiązać problem.
Intel wygrał nie dawno konkurs na najlepszego producenta sprzętu, który współdziała ze światem Open Source. Pomimo, że nie piszą sterowników bezpośrednio pod Linuksa do swoich kart graficznych. Ale za to udostępniają ich kod społeczności. Dzięki czemu mamy natywne sterowniki do grafiki. Jednak nie są one pozbawione wad. Problem pojawia się gdy używamy tychże sterowników, mamy włączonego Compiz'a i uruchamiamy aplikację OpenGL. Wtedy pojawiają się krzaki, aplikacja miga (tak jest w przypadku Google Earth) lub całkiem staje się nieczytelny (UFO: Alien Invasion).
Problem ten ma być już rozwiązany w nadchodzącej wersji Ubuntu 9.10. Ale póki co ten problem w Ubuntu występuje przy domyślnych ustawieniach. Mało tego: często się zdarza że wydajność tych kart znacznie spadła od czasu Ubuntu 8.10, na którym pomimo problemu z OpenGL i Compiz'em nie dało się odczuć zamulenia.
Na szczęście rozwiązano już problem, który występował w Ubuntu 9.04 ze sterownikami Intel'a i Compiz'em. Jako że zdarzały się regularne zwiechy, ekipa Compiz'a wrzuciła grafiki Intel'a na czarną listę. W czerwcu wydano nowe sterowniki, zaktualizowano X'y i problem zniknął. Co prawda można było wymusić włączenie Compiz'a, co ja oczywiście zrobiłem, nie odczuwając specjalnie spowolnienia, ani zwiechów środowiska graficznego.
Kolejnym problemem występującym przy tych kartach jest to, że w różnych konfiguracjach sprzętowych mogą mieć różny finał testowania poniższych rozwiązań. U jednych instalacja nowych sterowników w wersji beta dała wzrost wydajności, u innych nic nie zmieniła, a jeszcze u innych drastycznie spadła. A często bywa jeszcze tak, że włączenie jednego trybu renderingu działa lepiej w grafice 3d, ale już cienko z grafiką 2d. I na odwrót. Ale warto pokombinować, bo można wiele zyskać.
Na kolejnych podstronach omówie wszystkie sposoby poradzenia sobie z tym problemem. Ostrzegam, że jeśli nie potrafisz się obsługiwać Synaptic'iem bądź innym menedżerem pakietów, nie wiesz jakie pakiety wchodzą w skład X'ów, bądź nie wiesz który pakiet to sterowniki karty graficznych, nie zabieraj się za te sposoby. Możesz wyrządzić swojemu systemowi więcej szkody niż pożytku.
Przy rozwiązaniach będę podawał wyniki testów, które robiłem na swoim sprzecie. O to jego konfiguracja:
Do testów wykorzystywałem Compiz Benchmark i glxgears.

Glxgears na kostceDomyślnie grafika Intel'a pracuje w metodą akceleracji EXA. Muszę przyznać, że w tym trybie pracy osiągałem najlepsze wyniki jeśli chodzi o pracę w 3D. Wskazywał mi na 120 klatek na sekundę na stojącym pulpicie (czyli w momencie bezczynności), a kiedy poruszałem kostką lub otwierałem i zamykałem okna, zmuszając Compiz'a do animacji, spadało o 20 klatek. Glxgears wynosiło od 600 do 800 klatek na sekundę. Ale oczywiście próbując ruszyć kostką animacja została na miejscu a okno poruszało się razem z pulpitem. Widać to na zrzucie po prawej.
Chcąc naprawić ten problem, można włączyć tryb akceleracji UXA. Dzięki temu aplikacje OpenGL zaczynają poprawnie działać po Compiz'em, ale może nastąpić spadek wydajności. U mnie tak właśnie miało miejsce. Compiz Benchmark wskazywał około 100 FPS, a Glxgears spadło na około 500-600 FPS. Postanowiłem pozostać przy tym trybie pracy mojej karty graficznej, pomimo spadku wydajności, ze względu na to, że nie musiałem wyłączać Compiz'a aby skorzystać z aplikacji OpenGL. Czyli na przykład Google Earth.
Aby włączyć ten tryb należy wyedytować plik /etc/X11/xorg.conf i w sekcji Device dopisać linijkę:
Option        "AccelMethod" "uxa"
Aby zastosować nowe ustawienia należy zrestatować X'y. Najszybciej skrótem ctrl+alt+backspace. Po ponownym zalogowaniu się do systemu mamy już włączony tryb UXA. Możemy go przetestować uruchamiając jakąś aplikację OpenGL lub Glxgears i próbować obrócić kostkę. Teraz powinno wyglądać to dobrze.
Przeszukując zagraniczne fora czytałem opinie ludzi, że ten tryb działał u nich wydajniej niż EXA. Nie wszyscy podawali jaką konfiguracją dysponują, więc nie wiem od czego to może zależeć. Ale gdyby wydajność spadła za bardzo wystarczy wykomentować bądź usunąć dodaną wcześniej linijkę. Gdyby jednak środowisko się nie podniosło (co może się zdarzyć, choć ja tak nie miałem), można uruchomić wirtualną konsolę ctrl+alt+1 i wyedytować plik xorg.conf spod vi czy nano i usunąć tą linijkę.
Jeśli powyższy sposób nie pomógł możemy spróbować nieudokumentowanej opcji Greedy. Podobno niektórym pomógł. Ale nie działa z trybem UXA, więc należy go wyłączyć. Ja nie odczułem poprawienia działania karty. Czytając fora zdarzały się przypadki, że to pomagało. Włączenie tej opcji jest też banalne jak włączenie wcześniejszej. Znajdujemy plik xorg.conf w /etc/X11 i edytujemy tak, aby sekcja Device wyglądała tak:
Section "Device"
        Identifier "Configured Video Device"
        Driver "intel"
        Option "AccelMethod" "EXA"
        Option "MigrationHeuristic" "greedy"
EndSection
Oczywiście jak przy wszystkich wprowadzonych zmianach w pliku xorg.conf należy zrestartować X'y. Jeśli nie odniosło to skutku oczywiście cofamy zmiany.
Spróbujmy zatem kolejnych sposobów na zwiększenie wydajności i/lub pozbycie się problemów z OpenGL.

Metody z poprzedniej strony można spróbować na nowym sterowniku Intel'a, który jeszcze nie został włączony do oficjalnych repozytoriów Ubuntu. Ale na początek najlepiej zacząć od konfiguracji początkowej X'ów, czyli takiej jaką mamy zaraz po zainstalowaniu i zaaktualizowaniu z podstawowych repozytorii Ubuntu Jaunty. Aby dodać nowe repo ze sterownikiem i innymi potrzebnymi narzędziami, trzeba dodać następujące linijki do sources.list.
deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main
Dodajemy również klucz tego repo:
gpg --keyserver subkeys.pgp.net --recv AF1CDFA9 && gpg --export --armor AF1CDFA9  | sudo apt-key add -
Teraz aktualizujemy listę repo i dokonujemy aktualizacji systemu. Oprócz nowego sterownika Intel'a zaaktualizują się jeszcze inne pakiety związane z X'ami. M.In. libdrm - 2.4.9-1ubuntu1~xup~1.
Po aktualizacji sprawdzamy triki z opcjami UXA i Greedy. Ja na swojej maszynie nie zauważyłem zbytnio wzrostu ani spadku wydajności. Wyniki FPS były takie same. Jeśli zaś stwierdzasz, że jest gorzej wystarczy usunąć z sources.list te repozytorium. Uruchamiamy Synaptic'a. Odświeżamy listę repozytoriów. To co zainstalowaliśmy z tego repo będzie traktowane jako zainstalowane lokalnie, bez repo, ponieważ te nie jest już dostępne. Sprawdzić w historii jakie pakiety wcześniej się zaaktualizowały. Teraz klikamy Stan i Zainstalowane (lokalnie lub przestarzałe). Tam będą się znajdować te pakiety z tego usuniętego już repo. Zaznaczasz zaaktulizowany pakiet. Potem z menu Pakiet wybierasz Wymuś wersję. Pojawi się okno z listą do wyboru gałęzi repozytoriów. Wybieramy ten pakiet, który ma w nawiasie napis (jaunty-updates). W ten sposób wybieramy z którego repozytorium wybrać pakiet. Prawdopodobnie dokonamy downgrade'u. Ale za to wrócimu do pakietów z oficjalnego repozytorium.
Wymuszanie wersji
W ten sposób pozbędziemy się pakietów z aktualizacji z repo X-SWAT i wrócimy do stanu początkowego. Teraz możemy spróbować pójść nieco dalej.
W razie problemów z uruchomieniem X'ów, np. zamiast pulpitu mamy czarny ekran i tylko kursor myszy, resetujemy X'y. W GDM wybieramy sesję awaryjną XTerm i logujemy się. Wtedy nie uruchomi się Gnome, ale mamy środowisko graficzne i linię poleceń. Wpisujemy sudo synaptic i działamy jak wyżej.

Nie zaszkodzi posunąć się dalej i oprócz aktualizacji sterów od grafy, możemy pokusić się o instalację nowych X'ów, które prawdopodobnie pojawią się w kolejnym Ubuntu 9.10. Aby tego dokonać dodajemy nowe repozytorium. Przypominam, że przy testowaniu tychże rozwiązań, przed jakąkolwiek aktualizacją z tych repo dobrze jest się cofnąć do podstawowych repozytoriów Jaunty.
deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main
Dodajemy klucz:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8844C542
Po tym dajemy odświeżanie repozytoriów i aktualizację systemu. Teraz pobierzemy więcej pakietów. Po tej operacji testujemy jak zachowuje się system czy X'y. U mnie nie wypadło to najlepiej: Compiz Benchmark wykazał około 60 FPS podczas bezczynności; w momencie obrotu kostką spadł do 40. Glxgears wachał sie pomiędzy 300 a 500 FPS. Czyli spadek wydajności. Małym plusem jest to, że domyślnym trybem pracy jest UXA. Tak więc, bez żadnych zabiegów na xorg.conf możemy uruchamiać OpenGL na Compiz'ie. Pomimo spadku wydajności (wg benchmarka) osobiście odczułem jakby szybszą reakcję systemu na moje polecenia.
W tych repozytoriach znajduje się również najnowszy stabilny kernel 2.6.30, który w Ubuntu ukaże się dopiero w 9.10. Ja jednak nie zdecydowałem się na jego instalację. Ale z drugiej strony można się pokusić o to, ponieważ znajdują się w nim usprawnienia do X'ów. Może kiedyś to zrobię i opiszę z jakim skutkiem to wyszło i jaki to miało wpływ na wydajność grafiki.
Jeśli chcemy usunąć te pakiety wystarczy postępować jak na poprzedniej podstronie. Usunąć repozytorium xorg-edgers, odświeżyć repozytoria, Stan, Zainstalowane (lokalnie lub przestarzałe), sprawdzić które pakiety się zaaktualizowały z tego repo, wymusić wersję i instalacja starych pakietów. Na sam koniec restart X'ów.

Teraz przypomnijmy sobie jak działał nam sterownik Intel'a w Ubuntu 8.10. Mi działał wyśmienicie. Więc czemu go nie spróbować zainstalować. Dodajemy repo X-Retro. Znów dla przypomnienia powiem, że najlepiej zaczynać od standardowych pakietów, a nie cofać się z poprzedniego kroku. Wszelkich zmian na tej podstronie robimy na systemie, który ma oficjalne sterowniki i X'y, ze standardowych repozytoriów Ubuntu.
deb http://ppa.launchpad.net/ubuntu-x-swat/x-retro/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-x-swat/x-retro/ubuntu jaunty main
Klucz:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AF1CDFA9
Oczywiście odświeżamy, dokonujemy instalacji pakietu xserver-xorg-video-intel-2.4 i restartujemy X'y. Czytając fora znalazłem opinie ludzi, którym grafika zaczęła szybciej działać. Ja jednak nie odczułem takiej zmiany. U mnie system reagował gorzej niż na każdych innych pomysłach. Compiz Benchmark działał na 30 FPS, a Glxgears spadł do 150-200 FPS. Czyli jednym słowem: bieda. Zainstalowałem z powrotem oficjalne stery z Jaunty.  Włączanie UXA nic nie dało po za prawidłowym wyświetlaniem OpenGL.

Po zabawie stwierdziłem, że zainstaluje sterownik Intel'a z X-SWAT. Co prawda nie ma różnicy w wydajności pomiędzy standardowym, a tym, ale przynajmniej nowsza wersja. Szukałem rownież rozwiązania pewnej przypadłości, która dławiła mój system od pewnego czasu. Co sekundę lub dwie, aplikacje OpenGL przycinały się na krótki moment. Jak się potem okazało to nie była wina sterowników ani X'ów, a Conky. W momencie jego odświeżania następował skok i gubienie klatek. Po zabiciu procesu Conky wszystko wróciło do normy. Ale dzięki temu mogłem przetestować pomysły zarzucone w Internecie. Ciekaw jestem jaką inni mają wydajność swoich systemów z kartami graficznymi Intel'a. Proszę pisać w komentarzach.
Spodobało Ci się? Udostępnij, przypnij, podziel się z innymi:

Simple Disqus Comments