Oszczędzanie energii w Linuksie

Z ThinkPad-Wiki

Przejdź do: nawigacja, szukaj

Ta strona omawia środki oszczędzania energii w Linuksie. Omówiono też kilka ogólnych czynników wpływających na pobór mocy, więc artykuł może być interesujący także dla użytkowników Windows.

Spis treści

Zużycie energii: Linux w porównaniu z Windows

Pod względem zużycia energii Linux długo wyraźnie ustępował Windows. Dlatego Linux nie był szczególnie popularny na notebookach. Sytuacja ta odwróciła się dzięki zmianom w jądrze Linuksa ukierunkowanym na oszczędzanie energii (zwłaszcza dzięki Dynticks od jądra 2.6.21 z kwietnia 2007). Dzięki zoptymalizowanym przerwaniom jądra i ulepszonym przejściom między stanami P i C pobór mocy procesora w Linuksie udało się znacznie zmniejszyć, zob. wykres z lesswatts.org, strony Intela poświęconej oszczędzaniu energii w Linuksie.

Procesor stanowi jednak tylko niewielką część całkowitego poboru mocy. Na kartę graficzną i wyświetlacz często przypada ponad połowa zużycia energii całego systemu. A bez włączonych mechanizmów oszczędzania energii interfejs WLAN niepotrzebnie marnuje moc. Pobór mocy zależy więc silnie od konkretnego sprzętu i sterowników.

W przypadku starszego sprzętu energooszczędne sterowniki są często dostępne tylko dla Windows. Na przykład na T40 trudno jest obniżyć zużycie energii w Linuksie do wartości znanych z Windows. Dla nowszych modeli sterowniki linuksowe są jednak dobrze zoptymalizowane pod kątem oszczędzania energii. W ostatnich miesiącach Linux bardzo wiele nadrobił. Zintegrowana grafika Intela, a także popularne karty graficzne ATI i NVIDIA są dobrze wspierane od generacji ThinkPada T43.

Ponieważ Linux dzięki wydajniejszemu zarządzaniu pakietami (lepsze ponowne wykorzystanie części oprogramowania) potrzebuje mniej pamięci i mniej obciąża CPU, jego zużycie energii jest nieco niższe niż w Windows. Ponadto Linux daje więcej możliwości oszczędzania energii: wyłączanie dysku twardego, napędu DVD i USB oraz optymalizacja wybudzeń CPU są w Windows znacznie trudniejsze. Dzięki PowerTOP, narzędziu Intela identyfikującemu głównych konsumentów energii, w Linuksie zwraca się też większą uwagę na optymalizację energetyczną aplikacji. Z grubsza można więc przyjąć, że w Linuksie można liczyć na około 10% niższe zużycie energii w porównaniu z Windows.

Oba systemy operacyjne nie osiągają jednak swojego potencjału oszczędzania energii od razu po instalacji, potrzebne są do tego pewne optymalizujące ustawienia. W Linuksie należy uwzględnić poniższe wskazówki (dla Windows zob. Vista Stromverbrauch senken).

Wpływ stanów CPU na zużycie energii

Zrzut ekranu PowerTOP na świeżo zainstalowanym Xubuntu Hardy na x61t. Jak widać, procesor spędza zbyt dużo czasu w C2 zamiast w C3/C4. Dzięki przezroczystemu remapowaniu stany C4 są wyświetlane jako stany C3.
PowerTOP Screenshot unter einem frisch installierten Xubuntu Hardy auf einem x61t. Wie man sieht, verbringt die CPU zu viel Zeit in C2 statt in C3/C4. Durch das transparente Remapping werden C4-States als C3-States angezeigt.
Zrzut ekranu PowerTOP na HP nx8220, który w przeciwieństwie do ThinkPadów nie wykonuje remapowania C4 w BIOS-ie. Dzięki temu stany C4 są wyświetlane osobno.
PowerTOP Screenshot auf einem HP nx8220, der anders als ThinkPads kein C4-BIOS-Remapping macht. Dadurch werden C4-States separat angezeigt.

Decydujące dla zużycia energii przez procesor jest to, jaką część czasu spędza on w poszczególnych stanach. Istnieją stany P, w których procesor pracuje; różnią się one taktowaniem. Przy najwyższym taktowaniu pobór mocy procesora zbliża się do określonej wartości Thermal Design Power (TDP); dla mobilnego Core 2 Duo TDP wynosi na przykład 35 W. W praktyce pobór mocy procesora jest jednak zwykle wyraźnie niższy od tej wartości maksymalnej.

Decydujące oszczędności energii zapewniają stany C Deep Sleep (C3) i Deeper Sleep (C4). Procesor jest wtedy bezczynny, a określone obszary CPU zostają wyłączone. W zasadzie procesor w stanie bezczynności powinien zawsze przechodzić w najgłębszy stan C, czyli C4. W stanie C4 rdzenie CPU, pamięci podręczne poziomu 1, a także pamięć podręczna poziomu 2 są wyłączane, a napięcie zasilania jest obniżane, tak że pobór mocy CPU spada poniżej 2 W. Ponieważ wybudzenie z głębszych stanów uśpienia trwa dłużej niż z płytszych, CPU potrzebuje więcej czasu spoczynku, aby w nie wejść. Jeśli więc CPU jest zbyt często przerywany przez żądania pracy, osiąga jedynie płytsze stany C1 lub C2, które odłączają od zasilania mniej obszarów CPU, a tym samym dają tylko niewielkie oszczędności. Aby zminimalizować pobór mocy CPU, należy zatem znaleźć przyczynę wybudzeń CPU. Intel opracował do tego narzędzie: PowerTOP. Określa ono udział czasu CPU w aktywnych stanach P i w oszczędzających energię stanach uśpienia C oraz pokazuje, które procesy wybudzają CPU ze stanów C przez przerwania wybudzające.

Oszczędzanie energii dzięki Deeper Sleep C4

Podczas pracy biurowej i surfowania nowoczesny procesor jest ledwo obciążony i spędza ponad 95% czasu w stanie uśpienia C4.

W zależności od BIOS-u stan C4 „Deeper Sleep” można włączyć lub wyłączyć dla pracy na akumulatorze. W ThinkPadach BIOS wykonuje „przezroczyste mapowanie” stanu C4 na stan C3, tzn. PowerTOP nie widzi wtedy stanu C4, mimo że jest on aktywowany. Zamiast tego stany C4 są zliczane razem ze stanami C3. Niestety przez to przezroczyste mapowanie nie da się stwierdzić, czy szczególnie oszczędny stan C4 działa poprawnie ani jaką część czasu jest osiągany. Wskazówkę daje jedynie typowy pisk C4. Włączenie stanu C4 daje w każdym razie oszczędność około 1,5 W.

Wpływ napięcia rdzenia

Pobór mocy zależy liniowo od taktowania i kwadratowo od napięcia. Obniżenie napięcia rdzenia - undervolting - jest więc w zależności od CPU różnie skuteczne.

W obecnych procesorach undervolting przynosi oszczędności głównie przy dużym obciążeniu, ponieważ poza tym spędzają one jak najwięcej czasu w stanach C, przez co stany P (pracujące dzięki undervoltingowi przy niższym napięciu) mają już tylko znikomy wpływ na pobór mocy. W stanach uśpienia C3/C4 CPU całkowicie wyłącza części układu, więc potrzeba mniej napięcia także bez jawnego undervoltingu. Gdy CPU zostaje wybudzony, na krótko przechodzi na maksymalne taktowanie, wykonuje zadanie i wraca do stanu uśpienia. W zależności od tego, jak bardzo da się obniżyć napięcie rdzenia konkretnego CPU, odpowiednio zmniejsza się też pobór prądu w stanach P - rzędu 10-20%. Całkowitą oszczędność oblicza się, mnożąc przez udział stanów P.

Przykład: jeśli CPU spędza 33% czasu w stanach P, pobór mocy zmniejsza się łącznie o ok. 5%, przy założeniu około 15% redukcji poboru mocy w samych stanach P dzięki undervoltingowi. Należy jednak pamiętać, że minimalne możliwe napięcie przy niskich stanach P odbiega od wartości oryginalnej mniej niż przy wyższych.

W starszych procesorach bez stanów C stany P są podstawowymi funkcjami oszczędzania, dlatego undervolting może tu nawet przy niskim obciążeniu zmniejszyć pobór prądu o 10-15% (dotyczy tylko pierwszych generacji Centrino; od Dual Core wprowadzono blokady dla najniższych napięć).

Co ciekawe, zwykłe procesory T i Low Voltage firmy Intel wcale się nie różnią, zob. skandal z Intel Low Voltage.

Optymalizacja wybudzeń CPU

Najwięcej wybudzeń powoduje TouchPad lub Trackpoint, do 400 przerwań jest tu normalne. Poza tym liczba wybudzeń na sekundę powinna wynosić poniżej 50. Komunikatory jak Skype powodują około 20 wybudzeń/s, kolejne budziki to WLAN, ACPI i animowane ikony paska zadań. Często pomijanymi pożeraczami energii są też strony internetowe z Javą, Flashem lub Ajaksem. Goły pulpit działa z mniej niż 20 wybudzeniami/s. Gnome, KDE i XFCE różnią się przy tym zresztą niewiele.

Od jądra 2.6.24 w procesorach wielordzeniowych występują ponadto „Rescheduling Interrupts”. Przetwarzanie przerwań wybudzających jest wówczas rozdzielane między rdzenie, dzięki czemu CPU może mimo wszystko dłużej przebywać w stanach uśpienia. To Power Aware IRQ Balancing nie jest jednak w jądrze 2.6.24 jeszcze w pełni dopracowane. Jądro 2.6.25 generuje wyraźnie mniej Rescheduling Interrupts.

USB Autosuspend

USB jest magistralą opartą na odpytywaniu (polling), tzn. CPU musi stale się wybudzać, aby sprawdzać dane na magistrali, nawet gdy nic się tam nie dzieje. Uniemożliwia to prawidłowe przejście CPU w uśpienie C3/C4 także w stanie bezczynności. Można temu zaradzić, ustawiając USB na Autosuspend, tzn. gdy nie są podłączone żadne urządzenia USB lub brak danych, układy USB mogą przejść w tryb oszczędzania energii, a częstotliwość odpytywania może zostać zmniejszona. Ponieważ wiele starszych urządzeń (np. drukarki, skanery, a także niektóre aparaty, które po kilku sekundach bezczynności się wyłączają) ma z tym problemy, USB Autosuspend jest w niektórych dystrybucjach domyślnie wyłączony. Nowsze urządzenia działają z nim jednak bez problemów i można spokojnie włączyć USB Autosuspend. Hot-plugging, czyli podłączanie urządzeń USB podczas pracy z automatycznym wykrywaniem, nadal działa. Za pomocą:

cat /sys/bus/usb/devices/*/power/level
cat /sys/bus/usb/devices/*/power/autosuspend

można sprawdzić konfigurację USB (poprawny wynik to „auto” lub czas, po którym aktywowany jest Autosuspend).

PowerTOP podaje tu niestety nieprawdziwe informacje (wersje 1.8 i 1.9). Po pierwsze, propozycje oszczędzania energii dotyczące USB mają znaczenie tylko wtedy, gdy sterowniki USB są wbudowane w jądro, a nie gdy są skonfigurowane jako moduły jądra, jak w Ubuntu (CONFIG_USB=m). Po drugie, wykrywanie opiera się na sprawdzeniu autosuspend=0, co od jądra 2.6.22 oznacza jedynie, że do autosuspend czeka się 0 sekund (wcześniej oznaczało to, że autosuspend jest wyłączony, zob. zgłoszenie błędu). Poniższa, skądinąd często proponowana metoda nie przynosi zatem żadnego efektu:

for i in `find /sys -name autosuspend -exec echo {} \;` ; do echo "1" > $i ; done

lub

 for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; done

W każdym razie w Ubuntu Hardy usbcore jest skonfigurowany jako moduł i autosuspend jest domyślnie już włączony.

W innych dystrybucjach może być konieczne ustawienie modułu usbcore na Autosuspend, najlepiej przez opcje modułu w /etc/modprobe.d/options (Debian/Ubuntu):

options usbcore autosuspend=1

Poniższa, również często proponowana alternatywa działa tylko wtedy, gdy Autosuspend został włączony podczas kompilacji jądra (w Ubuntu Gutsy i Hardy nie jest tak): opcja rozruchowa „usbcore autosuspend=1” w wierszu poleceń jądra lub w konfiguracji GRUB

Mimo to przy instalacji Ubuntu Hardy „prosto z pudełka” CPU spędza około połowy czasu w uśpieniu C2 zamiast przechodzić do C3/C4. Przyczyną jest błąd w module USB 1.1 (uhci_hcd), który stale generuje dostęp bus master (DMA), nawet bez podłączonych urządzeń USB. Uniemożliwia to CPU przejście w głębsze stany uśpienia (przy DMA CPU musi zapewniać spójność pamięci podręcznej z RAM i dlatego nie może spać). Wyładowanie modułu USB sprawia, że CPU nie jest już powstrzymywany przed uśpieniem:

rmmod uhci_hcd

Udział C1 i C2 powinien dzięki temu spaść do 0%, a udział uśpienia C3/C4 przy niskim obciążeniu powinien wynosić ponad 95%, co daje około 1-2 W mniejszego zapotrzebowania na energię. W razie potrzeby moduł USB można ponownie załadować (jest potrzebny do urządzeń USB 1.1, urządzenia USB 2.0 działają także bez tego modułu):

modprobe uhci_hcd

Niestety zarówno czytnik linii papilarnych, jak i Bluetooth są podłączone przez USB 1.1 i bez modułu uhci_hcd nie da się ich używać. Aby mieć jedno i drugie - niski pobór mocy i działający czytnik linii papilarnych - moduł trzeba by za pomocą skryptu każdorazowo tymczasowo ładować i ponownie wyładowywać. To samo dotyczy korzystania z interfejsu Bluetooth lub innych urządzeń USB 1.1.

Po długich poszukiwaniach znane jest wreszcie rozwiązanie:

USB autosuspend działa poprawnie tylko wtedy, gdy sterowniki są zintegrowane z jądrem. W dystrybucjach, w których tak nie jest (np. Ubuntu Hardy), trzeba więc skompilować jądro z odpowiednimi modułami (instrukcja: Kompilowanie jądra). Wówczas można korzystać z czytnika linii papilarnych oraz Bluetooth, a procesor może jednocześnie przechodzić w oszczędne stany C3/C4. Działa też wtedy automatyczne wyłączanie USB w razie nieużywania.

W jądrze Ubuntu Intrepid Ibex to zmieniono, więc USB autosuspend działa od razu po instalacji.

Karty graficzne

Zintegrowane karty graficzne Intel i karty NVIDIA są zazwyczaj wykrywane automatycznie podczas instalacji Ubuntu Hardy, a funkcje oszczędzania energii są aktywowane. W przypadku kart ATI trzeba w System/Sprzęt/Sterowniki włączyć „Przyspieszony sterownik graficzny ATI” i zrestartować system. Sprawdzenie trybu za pomocą:

aticonfig --lsp

Włączenie funkcji oszczędzania energii daje około 3 W:

aticonfig --set-powerstate=1

Dla modeli z grafiką Nvidia należy w /etc/X11/xorg.conf w sekcji „Device” dodać poniższe, co niemal całkowicie eliminuje wybudzenia pochodzące od układu graficznego w zwykłym trybie 2D.

Option      "OnDemandVBlankInterrupts" "true"

Włączenie trybów oszczędzania energii kart graficznych Ati daje według doświadczeń (przynajmniej) w X31 1-2 W. W tym celu wpisuje się do /etx/X11/xorg.conf następujące:

Section "Device"
        (....)
        Option  "DynamicClocks" "true"
        Option "NoDri" "true"
EndSection

To wprawdzie wyłącza rozszerzenie DRI i efekty 3D przepadają, ale jest to istotny element ambitnego oszczędzania energii. Wartości w bezczynności przy najniższej jasności, włączonym WLAN i zaparkowanym dysku wynoszą w nowym Ubuntu 8.10 zwykle 7,3 W przy 10 wybudzeniach na sekundę, o ile odrobiło się lekcje w innych obszarach.

zobacz też:

Wyłączanie dysku twardego

Kontrolowanie dysku twardego za pomocą Laptop Mode i wyłączanie go w celu oszczędzania energii (dysk nie jest potrzebny podczas pracy biurowej ani przeglądania internetu):

  • W tym celu ustawić dysk twardy na maksymalne oszczędzanie energii (hdparm -B 1)
  • Zwiększyć Dirty Writeback Time pamięci podręcznej RAM dla dysku twardego, np. do 30 minut (domyślnie 5 sekund), czyli 180000 centysekund
  • Odpowiednio skrócić czas Spindown on idle, czyli czas bezczynności dysku przed jego wyłączeniem, np. do 1 sekundy (więcej nie jest potrzebne)
  • Dodatkowo należy wyłączyć niektóre dostępy do logów: syslog, noatime (zob. dokumentację Laptop Mode Tools)
  • za pomocą ramlog można też przenieść logi do ramdysku
  • Problem: Firefox, podobnie jak Opera, używa SQlight. Przy tym dane są często zapisywane na dysk z pominięciem pamięci podręcznej zapisu za pomocą flush().
  • W Firefoksie 3.0 można teraz wyłączyć ciągłe opróżnianie bufora zapisu w RAM za pomocą domyślnego ustawienia SQlite „Pragma Syncronous off”, wymaga to jednak ponownej kompilacji źródeł Firefoksa. Prawdopodobnie ten sam efekt uzyskuje się, zmieniając parametr w about:config (toolkit.storage.synchronous = wartość całkowita 0, oznaczająca „off”), jednak mimo to zawsze występują 2 odwołania na stronę, zob. także ten wątek na mozillazine („it writes to places.sqlite after every page loads and that causes an fsync”). Przy wyłączonym fsync mogą wystąpić błędy pliku places.sqlite, są one jednak niegroźne. Zaleta: aplikacja nie jest już blokowana i można płynnie pracować dalej. Dysk twardy mimo to się jednak uruchamia.
  • Najbardziej radykalny sposób zapobiega opróżnianiu bazy danych przez ustawienie jądra fsync/fdatasync disabled. Wymaga to oczywiście kompilacji jądra i nie jest całkiem bezpieczne (możliwa utrata danych w razie awarii).
  • Alternatywnie można przenieść bazę danych na RAM-dysk. Wtedy trzeba pilnować, aby przed wyłączeniem zawsze była zapisywana na dysk.
  • albo przenieść profil, a ściślej tylko krytyczny plik bazy danych places.sqlight, na dysk zdalny.
  • Można też użyć innej przeglądarki, np. Epiphany lub Kazehakase nie generują dostępów do dysku (z pominięciem pamięci podręcznej zapisu). Niestety w testowanych wersjach Epiphany i Kazehakase nie były naprawdę odporne na awarie, więc nie nadawały się do stałego użytku.
  • Odwołań do SQLite można też po prostu uniknąć, wyłączając niektóre funkcje. Czyli wyłączyć filtr phishingowy, historię, AwesomeBar, zob. np. wyłączanie historii. Dzięki temu praca bez dostępu do dysku twardego jest możliwa także z Firefoksem. Kto mimo to chce korzystać z funkcji takich jak wyszukiwanie na liście zakładek, lepiej niech sięgnie po usługi online, na przykład del.icio.us lub Mozilla Weave.
  • Dysk pozostaje wyłączony przy wydłużonym czasie Writeback, dopóki nie odwołamy się do niego wprost. Kilka godzin surfowania bez ani jednego dostępu do dysku nie stanowi problemu (wystarczy odpowiednio ustawić czas Writeback).
  • Przy wystarczającej ilości RAM (np. 3 GB) i odpowiednio długiej pracy bez restartu większość danych znajduje się w pamięci podręcznej, a dysk jest prawie nieużywany. Pamięć podręczna RAM zostaje zachowana, także po Sleep/Resume czy Hibernate.
  • Kto musi często restartować system, może użyć narzędzia preload do wypełnienia pamięci podręcznej RAM
  • Nawet pobieranie plików o rozmiarze megabajtów, np. pliku PDF, i jego późniejsze otwarcie w przeglądarce PDF nie powoduje dzięki buforowaniu zapisu ani jednego dostępu do dysku.
  • bez aktywności wentylatora i dysku twardego laptop jest wręcz niesamowity...

Sterowanie wentylatorem za pomocą ThinkPad_Fan_Control

ThinkPadFanControl umożliwia ustawienie progu wyzwalania dla wszystkich czujników temperatury
ThinkPadFanControl erlaubt die Einstellung einer Triggerschwelle für alle Temperatursensoren
  • Strona domowa ThinkPad_Fan_Control
  • Działa bezbłędnie w Ubuntu Hardy
  • Wentylator pozostaje wyłączony do ustawianej temperatury, powyżej której następuje przełączenie na sterowanie sprzętowe (BIOS)

W efekcie wentylator nie rusza płynnie, a powyżej ustawionego progu obroty są zbyt wysokie, czego niestety nie da się zmienić. Takie podejście wymaga jednak stosunkowo niewielu wybudzeń CPU. W Ubuntu Hardy wybudzenia ACPI zwiększają się jedynie z około 5 do około 10–25 na sekundę. Odpowiada to (przy niskim obciążeniu) dodatkowemu zużyciu rzędu 0,1 W (przy wysokim obciążeniu wybudzenia te nie wpływają na pobór mocy).

Zob. także Sterowanie wentylatorem

Aplikacje pochłaniające dużo energii

  • Za pomocą TOP lub PowerTOP można wyświetlić głównych podejrzanych, dzięki czemu widać, które procesy/aplikacje powodują obciążenie lub wybudzenia
  • Często pomijaną przyczyną obciążenia jest przeglądarka. Wiele stron zawiera obecnie animacje Java Script, które przy kilku otwartych kartach szybko prowadzą do znacznego zużycia energii. Kto chce możliwie długo surfować na baterii, powinien wyłączyć Java Script w ustawieniach przeglądarki. Wówczas jednak niektóre pożądane efekty nie będą wyświetlane, np. wiele edytorów WYSIWYG w przeglądarce wymaga Java Script. Niestety popularne przeglądarki nie pozwalają jeszcze włączać lub wyłączać Java Script tylko dla wybranych stron lub ich fragmentów. Również animacje Flash i filmy Flash to prawdziwi pożeracze energii. W przeciwieństwie do animacji Java Script zwykle jednak startują dopiero po kliknięciu. Niestety Flash nie zwalnia poprawnie zasobów, więc stronę, na której oglądano film Flash, trzeba całkowicie zamknąć. W przeciwnym razie interfejs dźwiękowy nie przechodzi w Sleep, a jego wybudzenia CPU powodują dodatkowe zużycie 1–2 W. Dochodzą do tego dodatki Web 2.0, jak Ajax. Niestety te dynamiczne elementy obciążają komputer, nawet gdy nie są wyświetlane. Kto korzysta z przeglądania w kartach na baterii, powinien pamiętać, że obciążają go także karty niewidoczne. Wpływ na pobór mocy jest znaczny: pojedyncza dynamiczna strona zwykle powoduje już kilka watów dodatkowego zużycia. Kto czyta pocztę np. bezpośrednio przez Google Mail w przeglądarce, nie powinien trzymać tej strony stale otwartej w tle (jako karta) podczas pracy na baterii (lepiej dla zużycia energii: pobierać pocztę przez POP lub IMAP).
  • Przewijanie, powiększanie i renderowanie: Obciążenie zasobów przez przeglądarkę podczas renderowania jest znaczne. Przy przewijaniu z włączoną opcją Smooth i powiększaniu całej strony system - zwłaszcza z grafiką Intel w połączeniu z włączonym compositingiem i wysoką rozdzielczością ekranu - szybko osiąga granicę wydajności. Więcej o najlepszych dla zużycia energii ustawieniach opcji przewijania w przeglądarkach w tym wątku. W Firefoksie 3 należy ustawić zoom na "Text only" i do przewijania użyć rozszerzenia takiego jak "Yet another Smooth Scrolling", co znacząco zmniejsza obciążenie CPU.
  • Gnome System Monitor jest wyjątkowo żarłoczny. Uruchomiony w tle powoduje od razu 4–5 W dodatkowego zużycia. Lepsze jest narzędzie wiersza poleceń, np. top.
  • Dynamiczne aplety paska zadań (np. do wyświetlania obciążenia CPU) lub aplety pulpitu (np. zegar z sekundnikiem) generują wiele wybudzeń i łącznie szybko powodują wat dodatkowego zużycia na poza tym nieobciążonym komputerze
  • Komunikatory internetowe generują pewną liczbę wybudzeń. Oparty na P2P Skype z ok. 20 wybudzeniami/s powoduje ok. 1 W dodatkowego zużycia. Scentralizowane komunikatory klient-serwer wystarczą sobie mniejszą liczbą.
  • Zasada ogólna: wszystko, co się porusza, miga lub musi być w inny sposób dynamicznie aktualizowane, generuje wybudzenia CPU, przeszkadza procesorowi w uśpieniu i tym samym zużywa energię

Różne wskazówki dotyczące oszczędzania energii w Linuksie

  • używać najnowszego jądra. Standardem w Ubuntu Hardy Heron jest 2.6.24. Informacje o aktualizacji jądra: Kompilowanie jądra. Aktualizacja z jądra 2.6.24 do 2.6.25 daje na procesorach Core Duo około 0,5 W oszczędności. Przyczyną są usprawnienia w równoważeniu IRQ (w Powertop wyświetlane jako „Rescheduling Interrupts”).
  • Uruchomić PowerTOP i wykonać jego propozycje oszczędzania energii oraz przejrzeć działające procesy pod kątem winowajców wybudzeń i w razie potrzeby je zakończyć
  • Opcjonalnie: undervolting (zmniejsza pobór mocy przy wyższym obciążeniu)
  • powiązany wątek na forum Thinkpad
  • Pożeraczami energii są przede wszystkim USB 1.* (uhci_hcd), _stary_ sterownik Bluetooth (niestety układy Broadcom w TP są podłączone przez legacy USB), CardBus dla pcmcia itd., aplikacje muzyczne, animacje, graficzne gadżety jak Compiz itp.
  • Wyłączyć Disk Cache w Firefoksie (przez about:config), co ogranicza dostępy do dysku (przy włączonym buforowaniu zapisu w RAM nie ma to jednak znaczenia)
  • Framebuffer compression, daje według Intela około 0,6 W

BIOS i oszczędzanie energii

  • Specyficzne dla T61: BIOS w wersji 1.26 jest najwyraźniej najbardziej oszczędny – daje ok. 2 W różnicy w porównaniu z BIOS-em w wersji 2.10 (dotyczy tylko Meromów, czyli procesorów z rodziny T7*). Zobacz także Vista, BIOS i oszczędzanie energii.

Oszczędzanie energii w WLAN

Włączanie trybu oszczędzania energii karty WLAN przy sterownikach ipw (starych):

iwpriv eth0 set_power 5

Uwaga: od nieznanej wersji sterownika, najpóźniej jednak od Ubuntu 8.10, parametr oszczędzania energii

iwpriv eth0 set_power 7

Można to sprawdzić następującym poleceniem:

max@x31:~$ iwpriv eth1 get_power
eth1      get_power:Power save level: 7 (BATTERY)

Dla sterowników iwl (nowszych):

echo 5 > /sys/bus/pci/drivers/iwl3945/*/power_level

lub

echo 5 > /sys/bus/pci/drivers/iwl4965/*/power_level

Znak "*" należy zastąpić odpowiednią wartością (przejść do katalogu i sprawdzić, jak się tam nazywa); w całości wygląda to np. tak:

echo 5 > /sys/bus/pci/drivers/iwl3945/0000:03:00.0/power_level

Odczyt działa analogicznie poleceniem cat:

cat /sys/bus/pci/drivers/iwl3945/0000:03:00.0/power_level

Tryb oszczędzania energii WLAN pozwala zaoszczędzić ok. 0,25–0,5 W (w zależności od obciążenia) i dodatkowo sprawia, że karta WLAN jest chłodniejsza (w wielu modelach ThinkPad – np. seria X – znajduje się pod prawą podpórką pod nadgarstek).

Trwałe zachowywanie zmian oszczędzania energii

W skrypcie startowym /etc/rc.local można sprawić, że ustawienia będą trwałe (tzn. wykonywane automatycznie przy każdym uruchomieniu systemu, co jednak nie zawsze wystarcza, zob. poniżej). Oto przykładowy plik (x61t):

# By default this script does nothing.
# Trackpoint sensibler (empfohlen für Trackpoint-Experten)
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
# und schneller
echo -n 250 > /sys/devices/platform/i8042/serio1/speed

# Wake-on-Lan aus
ethtool -s eth0 wol d

# PCI Geräte stromsparen
for i in /sys/bus/pci/devices/*/power_level ; do echo 5 > $i ; done

# WLAN stromsparen, hier 3945agb mit iwl-treibern
echo 5 > /sys/bus/pci/drivers/iwl3945/*/power_level
# WLAN Stromsparen bei intel2200 (z.B. T43)
# iwpriv eth1 set_power 5

# Sound stromsparen nach 4 sec
echo 4 > /sys/module/snd_hda_intel/parameters/power_save
# Sound stromsparen auf AC97 Chipsätzen (z.B. T40 - T43)
# echo 1 > /sys/module/snd_ac97_codec/parameters/power_save

# xbacklight aktivieren (Workaround für einen Bug in Hardy-Alpha-6)
# xrandr --output LVDS --set BACKLIGHT_CONTROL native
# USB autosuspenden (bringt ab Kernel 2.6.22 nichts mehr)
# for i in `find /sys -name autosuspend -exec echo {} \;` ; do echo "1" > $i ; done
# Laptop Mode aktivieren
echo 5 > /proc/sys/vm/laptop_mode
# governor auf ondemand
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# Stromsparenden Scheduler für Multicore Systeme aktivieren
echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
# AHCI Link Power Management. Auskommentiert wenn statt AHCI
# "Compatibility Mode" im Bios aktiviert ist; min_power bedingt
# ein sehr langsames Suspend to Ram
echo medium_power > /sys/class/scsi_host/host0/link_power_management_policy 

# Falls CD Laufwerk vorhanden das Polling abschalten
# hal-disable-polling --device /dev/cdrom
# Dirty Writeback Time vergrößern für weniger Festplattenaktivität
# 180000 Centisecs entspricht 30 Minuten Ruhe ((macht auch Laptop Mode)
echo 180000 > /proc/sys/vm/dirty_writeback_centisecs
# Bluetooth abschalten
hciconfig hci0 down ; rmmod hci_usb
exit 0

Zbędne moduły jądra dodać do czarnej listy /etc/modprobe.d/blacklist (wyłącza PCMCIA, USB, FireWire; późniejsze ręczne doładowanie modułów nie stanowi problemu):

# folgende Module nicht laden wegen Wakeups/Stromverbrauch
blacklist pcmcia
blacklist yenta_socket
# blacklist ehci_hcd # Bedingt keine Wakeups, nur bei angeschlossenen Geräten
blacklist uhci_hcd # USB 1.1, verbraucht 1-2 Watt! 
# Man kann das uhci_hcd-Problem aber durch integrieren des Moduls in den Kernel beheben, siehe Kernel compilieren
blacklist usbcore
blacklist ohci1394
blacklist firewire-ohci

Niektóre moduły są ładowane już w fazie initramfs. Czarną listę należy wymusić także tam poprzez:

update-initramfs -u

Współpraca Laptop Mode Tools i Gnome Power Manager

Niestety Gnome Power Manager (GPM) nadpisuje Dirty Writeback Time przy przełączeniu bateria/zasilacz, zob. także ten wątek na ubuntuusers. Oznacza to, że trzeba za każdym razem ustawiać ją ponownie ręcznie lub skryptem. Dotąd nie ma na to czystego rozwiązania poza dezaktywacją GPM (zmienione w Intrepid Ibex, zob. niżej).

GPM przejmuje jednak także kilka innych funkcji, np. obsługę kodów klawiszy. W jądrze 2.6.24 niestety nie działa przekazywanie fakekey przez jądro, zob. zgłoszenie błędu, tzn. bez GPM klawisze skrótów nie działają. Obejściem są polecenia setkeycode dla każdego klawisza, który jądro ma przepuszczać; można je zapisać trwale w /etc/rc.local.

W Ubuntu Intrepid Ibex przepracowano współpracę gnome-power-manager i laptop-mode-tools. GPM wywołuje teraz części kodu LMT, dzięki czemu wreszcie używane są wartości tam ustawione.

Innym problemem jest to, że niektóre interfejsy tracą swoje ustawienia po Suspend/Resume, np. Wake-on-Lan jest po wybudzeniu za każdym razem ponownie włączany. Tracone są także ustawienia oszczędzania energii WLAN.

Debugowanie

Pomocne przy debugowaniu: Sprawdzenie czasu Dirty Writeback:

cat /proc/sys/vm/dirty_writeback_centisecs

Czy Laptop Mode jest włączony, sprawdza się poleceniem:

cat /proc/sys/vm/laptop_mode

(0 oznacza wyłączony; >0 oznacza włączony)

Wyłączanie Gnome Power Manager:

killall gnome-power-manager

Uruchamianie i zatrzymywanie Laptop Mode:

sudo laptop_mode start

lub

sudo laptop_mode stop

Przykład kompleksowego pakietu dla X31 ze świeżym Ubuntu 8.10 – 7 W w stanie bezczynności

Zawsze miałem to w skryptach startowych; chciałbym, aby ktoś bardziej zorientowany skomentował lub poprawił, gdzie to najlepiej umieścić w nowym Ubuntu.

echo 1 > /sys/module/snd_ac97_codec/parameters/power_save
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

for i in /sys/bus/usb/devices/usb*/power/autosuspend ; 
  do echo 1 > /sys/bus/usb/devices/usb4/power/autosuspend; 
done

echo 5 > /proc/sys/vm/laptop_mode
iwpriv eth1 set_power 7
ethtool -s eth0 wol 


/etc/modprobe.d/blacklist

(..)
#USB1.1
blacklist uhci_hcd

#PCMCIA
blacklist pcmcia
blacklist yenta_socket

#SPEEDSTEP, USE acpi_cpufreq instead
blacklist speedstep-centrino

#IPTABLES
blacklist iptables_filter
blacklist ip_tables
blacklist x_tables

#PARPORT
blacklist ppdev
blacklist parport_pc
blacklist lp
blacklist parport

#IRDA
blacklist nsc_ircc
blacklist irda
blacklist crc_ccitt

#FIREWIRE
blacklist ohci1394
blacklist firewire-ohci

/etc/modules

(..)
acpi-cpufreq
ipw2200 associate=0 led=1

/etc/X11/xorg.conf - stanowi lwią część, aż do 2 W!


Section "Device"
        Identifier      "Configured Video Device"
        Option  "DynamicClocks" "true"
        Option "NoDri" "true"
EndSection

Moduł acpi_cpufreq z poprawką undervolting jest dostępny prekompilowany tutaj; dla Ubuntu 8.10 potrzebny jest obecnie moduł dla 2.6.27-7.

http://swiss.ubuntuforums.org/showthread.php?t=786402&page=22

Pobrać, rozpakować, a następnie skopiować.

sudo cp acpi-cpufreq.ko /lib/modules/$(uname -r)/kernel/arch/x86/kernel/cpu/cpufreq

Potem można ustawić wartości napięć; oto moje dla X31/1.7Ghz, trzeba je jednak dostosować, jeśli system się zawiesza.

sudo -s
echo 17:40 14:24 12:18 10:10 8:4 6:0 > /sys/devices/system/cpu/cpu0/cpufreq/phc_controls

Można to również dodać do głównego skryptu, wtedy jednak bez sudo -s

Laptop-mode można włączyć niewielką zmianą w pliku /etc/default/acpi-support:

# Switch to laptop-mode on battery power - off by default as it causes odd
# hangs on some machines
ENABLE_LAPTOP_MODE=true


Po wszystkich tych zmianach osiągam w moim X31 przy najniższej jasności, połączonym WLAN i bezczynności z zaparkowaną głowicą pobór 7 W. Uważam to za przyzwoity wynik, zwłaszcza że w tym stanie można czytać strony internetowe. Przy normalnym surfowaniu pobór ustala się między 7,7 W a 8,5 W. Wartość, która może się równać także z Windows XP!

Linki

Think-Wiki