Sterownik fglrx a oszczędzanie energii - Linux.

16 października, 2008

Karty graficzne firmy ATI, czyli obecnie AMD, przynajmniej wersje mobilne, montowane w laptopach, posiadają wbudowaną w sterowni funkcję łatwej zmiany prędkości. Jest ona szczególnie przydatna w laptopach, gdzie niekoniecznie przez cały czas potrzebna jest wydajność, za to liczy się możliwość dłuższej pracy na baterii czy po prostu cichszej pracy.

Aby sprawdzić, czy nasza karta ma możliwość ustawiania prędkości, należy wydać polecenie aticonfig z opcją --lsp (zakładam, że fglrx jest załadowany i działający). Przykładowy wynik dla mobilnej wersji karty X1600:

$ aticonfig --lsp
    core/mem      [flags]
-----------------
  1: 209/135 MHz  [low voltage]
* 2: 392/252 MHz  [default state]
  3: 425/378 MHz  [performance mode]

Gwiazdka oznacza aktualny stan działania karty, przy czym sterowniki są na tyle wredne/niedorobione, że domyślnie ustawiają stan default, natomiast numer to identyfikator trybu, który wymagany jest do wybrania danego trybu.

Aby wybrać tryb pierwszy, czyli oszczędzania energii, wydajemy polecenie:

aticonfig --set-powerstate=1

I tak naprawdę dla laptopów powinien to być domyślny tryb. Niestety, nie tylko nie jest domyślny, ale producent postanowił utrudnić działanie w tym trybie - po wybraniu trybu nr 1, zamknięciu pokrywy (lub wyłączeniu zasilania sieciowego), a następnie jej otwarciu karta (lub ponownym podłączeniu zasilacza) będzie działała w trybie default. Za działanie takie odpowiada plik /etc/acpi/fglrx-powermode.sh, a konkretnie zaszyte na sztywno linie:

powermode=`/usr/bin/aticonfig --lsp | grep -m1 low | cut -b 3-3`

(dla zamknięcia pokrywy), oraz

powermode=`/usr/bin/aticonfig --lsp | grep -m1 default | cut -b 3-3`

(dla otwarcia pokrywy). Czyli inteligentni inżynierowie z AMD postanowili, że jak zamkniemy pokrywę, to będzie tryb oszczędzania (nawet niegłupie), a jak otworzymy pokrywę, to niezależnie, co było wcześniej, będzie default (komentarz ocenzurowano).

Najprostszym - choć brzydkim - obejściem tego problemu jest wyłączenie obsługi stanów ACPI w pliku /etc/default/fglrx:

FGLRX_ACPI_SWITCH_POWERSTATES=false

Nie jest to rozwiązanie doskonałe - przy zamknięciu pokrywy karta będzie nadal działała w aktualnym stanie. Jednak dla osób, które podobnie jak ja, używają praktycznie wyłącznie trybu oszczędzania energii, jest wystarczające.

Inne możliwości to zmiana wpisów we wspomnianym skrypcie odpowiadającym za obsługę stanów ACPI (po prostu słowo default w drugiej linii zamieniamy na low, lub dodanie obsługi domyślnych stanów po zamknięciu pokrywy i po jej otwarciu, które można by definiować np. w /etc/default/fglrx. Niestety, mam wrażenie, że obie wspomniane możliwości nie są odporne na upgrade driverów - plik zostanie zapewne nadpisany, więc najlepsze, co można zrobić, to zgłosić błąd inżynierom AMD, aby poprawili to trwale (co niebawem uczynię).

1. e napisał(a):
16 października 2008, 11:32:41

podczas updejtu nadpisuje Ci pliki konfiguracyjne w /etc?
Uch!
gentoo FTW!

2. PACH napisał(a):
16 października 2008, 16:39:25

Jaka wersja fglrx? Mój HD2600 (wersja mobilna) na catalystach 8.7 nie miał możliwości zmiany trybów pracy, a nowszych niestety nie mogłem zainstalować i to mnie boli, może znasz sposób by zmusić do pracy tą kartę w trybach oszczędzania energii?

Edit są nowe catalysty 8.10 tylko coś changeloga nie widać ;)

3. mefju napisał(a):
16 października 2008, 21:12:52

HD 2600:

core/mem [flags] ————————-
  • 0/1461577 MHz [memory shares core clock]
  • 39459426/3052868 MHz [low panel refresh rate, performance mode]
  • 39459426/3052868 MHz [low panel refresh rate, performance mode]
  • 39459426/3052868 MHz [low panel refresh rate, performance mode]

ostatnia linia powtórzona z 30 razy ;)

4. rozie napisał(a):
16 października 2008, 21:57:53

e: Z powietrza się te pliki tam nie wzięły, paczka jest robiona przez ATI, więc spodziewam się najgorszego. W sumie można sprawdzić jak się komuś chce…

PACH: 8.532 AKA 8.9. Kumpel na hd2600 też ma ten problem i na 8.9 i na najnowszych czyli 8.10

5. PACH napisał(a):
16 października 2008, 23:36:06

szkoda, może trzeba poszukać jakiegoś patcha (jak pod Windows), ale z drugiej strony wykrywa że to jest Radeon Mobility więc powinny być dostępne opcje oszczędzania energii. No nic to taka „zaleta” tej karty że AMD/ATI umywa od niej ręce, wysyłając do producenta laptopa, a on z Linuksem jest na bakier (przynajmniej na oficjalnej stronie) ;) , a sterowniki RadeonHD są zgodne z HD tylko z nazwy (jeszcze nie dorobiły się wsparcia dla akceleracji 3D).

6. Różowy blog napisał(a):
21 listopada 2008, 08:12:58

Linux sterowanie zarządzaniem ACPI i fglrx.

Jakiś czas temu pisałem o fglrx i oszczędzaniu energii. Stwierdziłem, że znaczne ulepszenie istniejącego skryptu jest proste. Poniżej efekty w postaci dobrego zarządzania.