Zarządzanie zasilaniem
1.
Wprowadzenie
Pojemność i żywotność baterii w laptopach w ostatnich latach znacznie się
poprawiła. Niemniej jednak nowoczesne procesory pożerają znacznie więcej
energii niż te starsze, zaś każde pokolenie laptopów wprowadza coraz więcej
urządzeń głodnych energii. To dlatego zarządzanie zasilaniem jest teraz
bardziej istotne niż kiedykolwiek wcześniej. Zwiększanie żywotności baterii
niekoniecznie jest równoznaczne z kupnem nowych. Wiele można osiągnąć stosując
inteligentną politykę zarządzania zasilaniem.
Szybki przegląd
Ten przewodnik opisuje zarządzanie zasilaniem dla laptopów. Chociaż
niektóre części mogą się przydać również serwerom, posiadacze innych
komputerów nie powinni kierować się tym przewodnikiem, gdyż niektóre
polecenia w nim zawarte mogą wyrządzić szkody. Proszę nie stosować niczego z
tego przewodnika do serwera, jeśli nie jest się pewnym, że jest to nieszkodliwe
działanie.
Ponieważ przewodnik ten stał się nieco długi, poniżej znajduje się krótki
przegląd jego zawartości, który pomoże się w nim szybko zorientować.
Rozdział Warunki wstępne mówi o pewnych
wymaganiach, które muszą być spełnione, aby dowolne z poniższych urządzeń
działało. Są nimi ustawienia BIOS-u, konfiguracja jądra oraz pewne ułatwienia w
środowisku użytkownika. Następne 3 rozdziały skupiają się na urządzeniach,
które zwykle pożerają najwięcej energii - procesor, ekran oraz dysk twardy.
Każde z nich może być oddzielnie skonfigurowane. Zarządzanie zasilaniem procesora pokazuje jak ustawić
częstotliwość procesora, aby zachować maksymalnie dużo energii bez straty
wydajności. Kilka różnych sztuczek zapobiega działaniu dysku twardego, kiedy
nie jest to konieczne w Zarządzaniu zasilaniem dla dysku
twardego (zmniejszanie poziomu hałasu jako miły skutek uboczny). Parę
uwag o bezprzewodowych kartach sieciowych oraz USB kończą część o urządzeniach
w Zarządzaniu zasilaniem dla innych urządzeń
podczas, gdy inny rozdział jest poświęcony (raczej eksperymentalnie) stanom uśpienia (ang. sleep states). Ostatni rozdział,
Rozwiązywanie problemów, pokazuje najczęstsze
pułapki.
Budżet energii dla każdego składnika
Ilustracja 1.1: Budżet energii dla każdego składnika |
 |
Niemal każda część może działać w różnych stanach - chociażby wyłączonym,
uśpionym, bezczynnym, czynnym - pochłaniając różne ilości energii. Najwięcej
pożerają ekran LCD, procesor, chipset i dyski twarde. Często możemy uaktywnić
niezależne od systemu operacyjnego zarządzanie zasilaniem w BIOS-ie, jednak
poprzez inteligentne ustawienie tego w systemie operacyjnym, dostosowujące się
do różnych, sytuacji możemy osiągnąć znacznie więcej.
2.
Warunki wstępne
Przed wejściem w szczegóły zarządzania zasilaniem poszczególnych urządzeń
należy się upewnić, że spełnione są pewne wymagania. Po sprawdzeniu ustawień w
BIOS-ie, niektóre opcje w jądrze mogą być uaktywnione - w skrócie są nimi ACPI,
stany uśpienia oraz skalowanie częstotliwości procesora. Ponieważ oszczędzanie
energii wiąże się ze stratą wydajności lub zwiększonym opóźnieniem, więc
powinno to być załączone tylko podczas pracy na bateriach. Tu przychodzi z
pomocą nowy poziom uruchamiania o nazwie battery.
BIOS
Najpierw przypatrzmy się ustawieniom zarządzania zasilania w BIOS-ie.
Najlepszym rozwiązaniem jest, aby połączyć polityki BIOS-u oraz systemu
operacyjnego, lecz na dzień dzisiejszy lepiej wyłączyć większość ustawień w
BIOS-ie. To zapewnia, że BIOS nie będzie wtrącał do naszej polityki zasilania.
Nie należy zapomnieć, aby ponownie sprawdzić ustawienia BIOS-u po
skonfigurowaniu czegokolwiek.
Ustawianie flag USE
Po pierwsze należy sprawdzić czy flaga acpi jest ustawiona w
/etc/make.conf. Innymi flagami, które mogą mieć dla nas znaczenie
są apm, lm_sensors, nforce2, nvidia, pmu.
Więcej informacji na ich temat można znaleźć w
/usr/portage/profiles/use*.desc. Jeżeli zapomnimy ustawić którejś
z nich, możemy przekompilować pakiety jej używające przy użyciu opcji
--newuse dla emerge (Zobacz man 1 emerge ).
Konfiguracja jądra
Wsparcie dla ACPI (Advanced Configuration and Power Interface - dosłownie
zaawansowana konfiguracja i interfejs zasilania) w jądrze jest nadal w fazie
rozwoju. Użycie świeżych źródeł jądra zapewnia najnowszą stabilną wersję.
W Portage znajduje się wiele różnych rodzajów źródeł jądra. Osobiście polecamy
używanie gentoo-sources lub tuxonice-sources. Te ostatnie
zawierają patche dla Software Suspend 2 (więcej w rozdziale na temat stanów uśpienia). Podczas konfiguracji jądra należy
zaznaczyć przynajmniej poniższe opcje:
Listing 2.1: Minimalne ustawienia jądra dla zarządzania zasilaniem (jądro 2.6) |
Power Management Options --->
[*] Power Management Support
[ ] Software Suspend
ACPI( Advanced Configuration and Power Interface ) Support --->
[*] ACPI Support
[ ] Sleep States
[ ] /proc/acpi/sleep (deprecated)
[*] zasilacz sieciowy Adapter
[*] Battery
<M> Button
<M> Video
[ ] Generic Hotkey
<M> Fan
<M> Processor
<M> Thermal Zone
< > ASUS/Medion Laptop Extras
< > IBM ThinkPad Laptop Extras
< > Toshiba Laptop Extras
(0) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
[*] Power Management Timer Support
< > ACPI0004, PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)
CPU Frequency Scaling --->
[*] CPU Frequency scaling
[ ] Enable CPUfreq debugging
< > CPU frequency translation statistics
[ ] CPU frequency translation statistics details
Default CPUFreq governor (userspace)
<*> 'performance' governor
<*> 'powersave' governor
<*> 'ondemand' cpufreq policy governor
<*> 'conservative' cpufreq governor
<*> CPU frequency table helpers
<M> ACPI Processor P-States driver
<*> CPUFreq driver for your processor
|
Samemu należy zdecydować czy chcemy włączyć Software Suspend czy Stanów uśpienia
(patrz poniżej). Jeśli posiadamy laptop firmy ASUS, Medion lub
Toshiba, włączamy odpowiednią opcję.
Jądro musi wiedzieć w jaki sposób ma włączyć skalowanie częstotliwości
procesora. Ponieważ każdy typ procesora ma różny interfejs, więc musimy wybrać
odpowiedni sterownik dla naszego procesora. Należy tu uważać - włączenie
Intel Pentium 4 clock modulation w systemie z Pentium M prowadzi do
dziwnych rezultatów. Należy zapoznać się z dokumentacją jądra, jeśli nie
jesteśmy pewni którą opcję wybrać.
Kompilujemy jądro i upewniamy się, że podczas startu systemu ładują się
odpowiednie moduły i uruchamiają jądro z włączonym ACPI. Następnie wykonujemy
emerge sys-power/acpid, aby uzyskać demon acpi. Informuje on o
zdarzeniach takich jak przełączanie z zasilacza sieciowego do baterii lub
zamykaniu ekranu. Należy się upewnić, że moduły zostały załadowane, jeśli nie
wkompilowaliśmy ich w jądro, po czym uruchamiamy acpid za pomocą polecenia
/etc/init.d/acpid start. Wykonujemy rc-update add acpid default,
aby ładować ten moduł podczas startu systemu. Wkrótce nauczymy się go używać.
Listing 2.2: Instalowanie acpid |
# emerge sys-power/acpid
# /etc/init.d/acpid start
# rc-update add acpid default
|
Tworzenie poziomu uruchamiania o nazwie battery
Domyślnie zarządzanie zasilaniem włączy się tylko kiedy to będzie
potrzebne - podczas pracy na bateriach. Aby wykonać przełączenie pomiędzy
zasilaczem sieciowym a wygodną baterią, stworzymy poziom uruchamiania o nazwie
battery, który będzie zawierał wszystkie skrypty uruchamiające i
wyłączające zarządzanie zasilaniem.
Uwaga:
Możemy bezpiecznie ominąć tę część, jeśli nie chcemy mieć dodatkowego poziomu
uruchamiania. Jednakże przeskoczenie tej części spowoduje, że ustawiając resztę
trzeba będzie się posłużyć kilkoma sztuczkami, gdyż następne rozdziały
przewodnika zakładają, że poziom uruchamiania o nazwie battery
istnieje.
|
Listing 2.3: Tworzenie poziomu uruchamiania o nazwie battery |
# cd /etc/runlevels
# cp -a default battery
|
Skończone. Nowy poziom uruchamiania o nazwie battery zawiera wszystko
co poziom default, ale nie mamy jeszcze automatycznego przełącznika
pomiędzy nimi dwoma. Czas to zmienić.
Reagowanie na zdarzenia ACPI
Typowymi zdarzeniami ACPI są zamykanie ekranu, zmiana źródła zasilania lub
wciśnięcie przycisku uśpienia. Ważnym zdarzeniem jest zmiana źródła zasilania,
który powinien spowodować przełączenie poziomów uruchamiania. Zajmie się tym
poniższy skrypt:
Najpierw potrzebujemy skryptu, który przełącza poziom uruchamiania na
default lub battery zależnie od źródła zasilania. Skrypt używa
programu on_ac_power z pakietu sys-power/powermgmt-base, należy
się zatem upewnić czy jest on zainstalowany w naszym systemie.
Listing 2.4: Instalacja powermgt-base |
# emerge powermgmt-base
|
Teraz jesteśmy gotowi do rozpoznania źródła zasilania, poprzez wykonanie
on_ac_power && echo Podłączone do prądu || echo Działa z baterii
w powłoce. Poniższy skrypt jest odpowiedzialny za zmianę poziomów uruchamiania.
Należy zapisać go jako /etc/acpi/actions/pmg_switch_runlevel.sh
Listing 2.5: /etc/acpi/actions/pmg_switch_runlevel.sh |
#!/bin/bash
RUNLEVEL_AC="default"
RUNLEVEL_BATTERY="battery"
if [ ! -d "/etc/runlevels/${RUNLEVEL_AC}" ]
then
logger "${0}: Poziom uruchomienia ${RUNLEVEL_AC} nie istnieje. Przerwano."
exit 1
fi
if [ ! -d "/etc/runlevels/${RUNLEVEL_BATTERY}" ]
then
logger "${0}: Poziom uruchomienia ${RUNLEVEL_BATTERY} nie istnieje. Przerwano."
exit 1
fi
if on_ac_power
then
if [[ "$(</var/lib/init.d/softlevel)" != "${RUNLEVEL_AC}" ]]
then
logger "Przełączanie do poziomu ${RUNLEVEL_AC}"
/sbin/rc ${RUNLEVEL_AC}
fi
elif [[ "$(</var/lib/init.d/softlevel)" != "${RUNLEVEL_BATTERY}" ]]
then
logger "Przełączanie do poziomu ${RUNLEVEL_BATTERY}"
/sbin/rc ${RUNLEVEL_BATTERY}
fi
|
Nie zapomnijmy o ustawieniu, aby plik był wykonywalny (chmod +x
/etc/acpi/actions/pmg_switch_runlevel.sh). Ostatnią rzeczą jaką musimy
jeszcze zrobić, jest wywołanie skryptu zawsze, gdy zmieni się źródło zasilania.
Możemy tego dokonać poprzez przechwytywanie zdarzeń ACPI, używając
acpid. Po pierwsze trzeba sprawdzić, jakie zdarzenia są wywoływane, gdy
zmienia się źródło zasilania. Na większości laptopów są to kolejno
ac_adapter oraz battery, jednak należy pamiętać, iż na naszym
mogą się one nazywać inaczej.
Listing 2.6: Sprawdzanie zdarzeń wywoływanych przy zmianie źródła zasilania |
# tail -f /var/log/messages | grep "received event"
|
Uruchamiamy zatem powyższe polecenie, a następnie wyciągamy kabel zasilający.
Naszym oczom powinno ukazać się coś takiego:
Listing 2.7: Przykładowe wyjście przy zmianie źródła zasilania |
[Tue Sep 20 17:39:06 2005] received event "ac_adapter AC 00000080 00000000"
[Tue Sep 20 17:39:06 2005] received event "battery BAT0 00000080 00000001"
|
Część, która nas interesuje znajduje się w cudzysłowiu zaraz za received
event. Będą one zawarte w plikach, które stworzymy poniżej. Nie musimy się
martwić, jeżeli nasz system tworzy wiele zdarzeń lub zawsze takie same. Tak
długo jak jakiekolwiek zdarzenie jest generowane, zmiana poziomu uruchamiania
będzie działać.
Listing 2.8: /etc/acpi/events/pmg_ac_adapter |
event=ac_adapter.*
action=/etc/acpi/actions/pmg_switch_runlevel.sh %e
|
Listing 2.9: /etc/acpi/events/pmg_battery |
event=battery.*
action=/etc/acpi/actions/pmg_switch_runlevel.sh %e
|
Na koniec acpid musi zostać ponownie uruchomione w celu zastosowania zmian.
Listing 2.10: Kończenie przełączania poziomów uruchamiania z acpid |
# /etc/init.d/acpid restart
|
Próbujemy: wkładamy i wyciągamy wtyczkę zasilacza sieciowego i obserwujemy
syslog w poszukiwaniu komunikatów "Switching to AC mode" lub "Switching to
battery mode". Należy spojrzeć do części Rozwiązywanie
problemów, jeśli skrypt nie będzie w stanie wykryć poprawnie źródła.
Dzięki naturze mechanizmu zdarzeń, nasz laptop załaduje się w poziom
uruchamiania default bez względu na to czy pobieramy energię z zasilacza
sieciowego czy z baterii. Jest to dobre rozwiązanie, jeżeli laptop jest zasilany
z gniazda sieciowego, jednak w przeciwnym razie chcielibyśmy, aby system był
ładowany do poziomu battery. Możemy dodać dodatkowy wpis do bootloadera
softlevel=battery, ale możemy zapomnieć go wybrać, gdy będziemy pracowali
na baterii. Lepszym rozwiązaniem jest sfałszować zdarzenie ACPI pod koniec
procesu uruchamiania systemu i niech skrypt /etc/acpi/default.sh
zdecyduje czy zmiana poziomu uruchamiania jest konieczna. Otwieramy
/etc/conf.d/local.start w ulubionym edytorze i dodajemy następujące
linie:
Listing 2.11: Dostrajanie poziomów uruchamiania podczas ładowania systemu, poprzez edycję local.start |
/etc/acpi/actions/pmg_switch_runlevel.sh "battery/battery"
|
W ten sposób przygotowani, możemy włączyć polityki zarządzania zasilaniem dla
konkretnych urządzeń.
3.
Zarządzanie zasilaniem dla procesora
Procesory dla komputerów przenośnych mogą operować na różnych częstotliwościach.
Niektóre pozwalają również na zmianę napięcia zasilającego. Przez większość
czasu procesor nie musi pracować na pełnych obrotach a zmniejszenie
częstotliwości może zachować dużo energii - często bez straty wydajności.
Pewne terminy techniczne
Podczas skalowania częstotliwości procesora możemy natknąć się na pewne
nieznane nam terminy techniczne. Poniżej znajduje się krótki wstęp.
Po pierwsze jądro musi być w stanie zmienić częstotliwość procesora.
Sterownik procesora CPUFreq zna te polecenia. Stąd jest ważne, aby wybrać
właściwy procesor w jądrze. Powinniśmy już to mieć za sobą. Kiedy jądro wie jak
zmieniać częstotliwości, powinno również wiedzieć jaką częstotliwość obecnie
ustawić. To jest wykonywane według polityki, która składa się z
polityki CPUFreq oraz regulatora. Polityką CPUfreq są tylko 2
liczby, które definiują zakres częstotliwości - minimalną i maksymalną
częstotliwość. Regulator teraz decyduje, którą z dostępnych częstotliwości użyć.
Na przykład, regulator powersave zawsze wybiera najniższą dostępną
częstotliwość, regulator performance najwyższą. Regulator
userspace nie podejmuje żadnej decyzji, ale wybiera to co chce użytkownik
(lub program w przestrzeni użytkownika) chce - co oznacza, że czyta on
częstotliwość z
/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed.
Nie brzmi to jak dynamiczne skalowanie częstotliwości i wcale tym nie jest.
Jednakże dynamika może być osiągnięta, za pomocą różnych podejść. Na przykład,
regulator ondemand wykonuje swoje decyzje zależnie od obciążenia
procesora. To samo jest wykonane za pomocą narzędzi takich jak cpudyn,
cpufreqd, powernowd i wielu innych. Zdarzenia ACPI mogą również
być użyte do włączenia lub wyłączenia dynamicznych zmian częstotliwości zależnie
od źródła zasilania.
Ręczne ustawianie częstotliwości
Obniżanie prędkości oraz napięcia CPU ma dwie zalety: z jednej strony mniej
energii jest zużywane, z drugiej zmniejsza się ilość wydzielanego ciepła, gdyż
system nie działa na pełnych obrotach. Główną wadą tego rozwiązania jest
oczywiście utrata wydajności. Zmniejszenie prędkość procesora jest wyborem
pomiędzy utratą wydajności, a zaoszczędzeniem energii.
Uwaga:
Nie każdy laptop wspiera skalowanie częstotliwości. Jeśli nie jesteśmy pewni,
powinniśmy spojrzeć na listę wspieranych procesorów w części Rozwiązywanie
problemów, aby sprawdzić czy nasz procesor jest na tej liście.
|
Nadszedł czas, aby sprawdzić czy zmienianie częstotliwości CPU działa.
Zainstalujmy dodatkowe narzędzie, które jest bardzo użyteczne w celach
diagnostycznych: sys-power/cpufrequtils.
Listing 3.1: Sprawdzanie częstotliwości procesora |
# emerge cpufrequtils
# cpufreq-info
|
Poniżej znajduje się przykładowe wyjście:
Listing 3.2: Przykładowe wyjście cpufreq-info |
cpufrequtils 0.3: cpufreq-info (C) Dominik Brodowski 2004
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
driver: centrino
CPUs which need to switch frequency at the same time: 0
hardware limits: 600 MHz - 1.40 GHz
available frequency steps: 600 MHz, 800 MHz, 1000 MHz, 1.20 GHz, 1.40 GHz
available cpufreq governors: conservative, ondemand, powersave, userspace, performance
current policy: frequency should be within 924 MHz and 1.40 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.40 GHz
|
Następnie należy pobawić się cpufreq-set, aby się upewnić, że
przełączanie częstotliwości działa. Na przykład uruchamiamy cpufreq-set -g
ondemand, aby uruchomić regulatora ondemand i sprawdzić zmianę za pomocą
cpufreq-info. Jeśli nie zadziała jak oczekiwaliśmy, wtedy możemy znaleźć
pomoc w części Rozwiązywanie problemów na końcu
tego przewodnika.
Zautomatyzowana zmiana częstotliwości
Powyższe rozwiązanie jest dosyć dobre, ale nie do codziennego użytku. Lepiej,
aby system ustawił automatycznie odpowiednią częstotliwość. W tym celu istnieją
różne podejścia. Poniższa tabela pokazuje szybki przegląd wszystkich możliwości,
aby pomóc wybrać jeden z nich. Jest ona z grubsza podzielona na 3 kategorie
jądro dla podejść, które wymagają tylko wsparcia jądra, demon dla
programów, które są uruchomione w tle oraz graficzne dla programów, które
dostarczają graficzny interfejs użytkownika dla łatwej konfiguracji i zmian.
| Nazwa |
Kategoria |
Decyzja o przełączeniu |
Regulatory jądra |
Dalsze regulatory |
Komentarze |
| Regulator "ondemand" |
Jądro |
Obciążenie procesora |
Niedostępne |
Niedostępne |
Wybiera maksymalną częstotliwość, gdy procesor jest obciążony i stopniowo ją
obniża, gdy ten jest bezczynny. Dalsze dostrajanie poprzez pliki w
/sys/devices/system/cpu/cpu0/cpufreq/ondemand/. Ciągle wymaga
narzędzi użytkownika (programów, skryptów), jeżeli przełączenie regulatora
lub coś podobnego jest naszym celem.
|
| 'conservative' governor |
Kernel |
CPU load |
N.A. |
N.A. |
W przeciwieństwie do regulatora ondemand, conversative nie przeskakuje do
najwyższej częstotliwości, gdy procesor jest bardzo obciążony, ale podnosi ją
krok po kroku. Dalsze dostrajanie poprzez pliki
/sys/devices/system/cpu/cpu0/cpufreq/ondemand/. Ciągle wymaga
narzędzi użytkownika (programów, skryptów), jeśli przełączanie regulatora
lub coś podobnego jest naszym celem.
|
| cpudyn |
Demon |
Obciążenie procesora |
performance, powersave |
Dynamic |
Również wspiera stan oczekiwania dysku - jednakże należy zauważyć, że
laptop-mode w większości przypadków, wykona lepszą robotę.
|
| cpufreqd |
Demon |
Stan baterii, obciążenie procesora, uruchomione programy i inne |
Wszystko dostępne |
Żaden |
Wyszukane (ale skomplikowane) ustawienie. Możliwy do rozszerzenia poprzez
wtyczki takie jak monitorowanie czujników (lm_sensors) lub koordynowanie
pamięci i rdzeni na układach graficznych firmy NVidia. Cpufreqd wspiera SMP
i może opcjonalnie być ręcznie kontrolowany w momencie uruchomienia.
|
|
powernowd
|
Demon |
Obciążenie procesora |
Żaden |
Passive, sine, aggresive |
Wspiera SMP.
|
|
ncpufreqd |
Demon |
Temperaturę |
Żaden |
Powersave, performance |
Zmienia używany regulator pomiędzy performance i powersave zależnie od
temperatury. Bardzo użyteczny na notorycznie przegrzewających się laptopach.
|
| speedfreq |
Demon |
Obciążenie procesora |
Żaden |
Dynamic, powersave, performance, fixed speed |
Mały, ale o dużych możliwościach z użytecznym interfejsem klient-serwer.
Wymaga jądra 2.6. Jego rozwój został porzucony, a on sam usunięty z Portage.
Jeżeli go jeszcze używamy, powinniśmy zmienić go na cpufreqd.
|
| gtk-cpuspeedy |
Graficzny |
Żaden |
Żaden |
Żaden |
Aplikacja Gnome, narzędzie graficzne, do ręcznego ustawiania częstotliwości
procesora. Nie oferuje żadnej automatyzacji.
|
| klaptopdaemon |
Graficzny |
Stan baterii |
Wszystko dostępne |
Żaden |
Tylko KDE, regulator 'ondemand' wymagany dla dynamicznego skalowania
częstotliwości.
|
Dopasowywanie częstotliwości do obecnego obciążenia procesora jest z pozoru
łatwym zadaniem, ale nie jest to takie trywialne. Zły algorytm może spowodować
ciągłe przełączanie pomiędzy 2 częstotliwościami lub marnowanie energii poprzez
ustawienie częstotliwości nieodpowiedniej do obciążenia procesora.
Który wybrać? Jeśli nie wiemy, to wybieramy cpufreqd:
Listing 3.3: Instalowanie cpufreqd |
# emerge cpufreqd
|
cpufreqd może być skonfigurowany poprzez edycję
/etc/cpufreqd.conf. Domyślna konfiguracja może wyglądać trochę
nieładnie. Ja polecam zastąpienie jej konfiguracją napisaną przez jednego z
deweloperów Gentoo - Henrika Brixa Andersena (znajduje się poniżej). Należy
zauważyć, że potrzebujemy cpufreqd-2.0.0 lub późniejszego. Wcześniejsze wersje
mają rożny format pliku konfiguracyjnego.
Listing 3.4: /etc/cpufreqd.conf (cpufreqd-2.0.0 i późniejsze) |
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=3
enable_plugins=acpi_ac, acpi_battery
enable_remote=1
remote_group=wheel
verbosity=5
[/General]
[Profile]
name=ondemand
minfreq=0%
maxfreq=100%
policy=ondemand
[/Profile]
[Profile]
name=conservative
minfreq=0%
maxfreq=100%
policy=conservative
[/Profile]
[Profile]
name=powersave
minfreq=0%
maxfreq=100%
policy=powersave
[/Profile]
[Profile]
name=performance
minfreq=0%
maxfreq=100%
policy=performance
[/Profile]
[Rule]
name=battery
ac=off
profile=conservative
[/Rule]
[Rule]
name=battery_low
ac=off
battery_interval=0-10
profile=powersave
[/Rule]
[Rule]
name=ac
ac=on
profile=ondemand
[/Rule]
|
Uruchamiamy demon oraz dodajemy go do poziomów default oraz
battery.
Listing 3.5: Uruchamianie cpufreqd |
# rc-update add cpufreqd default battery
# rc
|
Niekiedy wskazane jest użycie innej polityki niż wybiera demon. Np. kiedy poziom
baterii jest niski, ale wiemy, iż niedługo będziemy mogli podłączyć go do prądu.
W tym przypadku możemy przełączyć się na tryb ręcznego sterowania cpufreqd, przy
użyciu cpufreqd-set manual oraz wybrać jedno ze skonfigurowanych zachowań
(ich listę możemy uzyskać poprzez cpufreqd-get). Możemy opuścić tryb
ręcznego sterowania poprzez wpisanie cpufreqd-set dynamic.
Ostrzeżenie:
Nie należy włączać więcej niż jednego z powyższych programów równocześnie.
Może to spowodować nieład, np. ciągłe przełączanie pomiędzy dwoma
częstotliwościami.
|
Weryfikowanie rezultatu
Ostatnią rzeczą jest sprawdzenie czy nasza polityka wykonuje dobrą robotę.
Łatwym sposobem, aby to sprawdzić jest monitorowanie CPU:
Listing 3.6: Monitorowanie prędkości procesora |
# watch grep \"cpu MHz\" /proc/cpuinfo
|
Jeśli /proc/cpuinfo nie jest aktualizowane (patrz Rozwiązywanie problemów), to monitorujemy częstotliwość
za pomocą sys-apps/x86info:
Listing 3.7: Alternatywne monitorowanie prędkości procesora |
# watch x86info -mhz
|
Zależnie od ustawień, prędkość CPU powinna wzrastać pod dużym obciążeniem,
maleć podczas bezczynności lub pozostać na tym samym poziomie. Używając
cpufreqd, jeśli mamy ustawioną rozwlekłość (ang. verbosity) na 5 lub
więcej w cpufreqd.conf otrzymamy dodatkowe informacje o tym co się
dzieje, za pomocą programu logującego (syslog).
4.
Zarządzanie zasilaniem dla ekranu LCD
Jak możemy zauważyć na rysunku 1.1, ekran LCD
pożera największą część energii (nie dotyczy to komputerów stacjonarnych). Stąd
jest to dosyć ważne nie tylko, aby wyłączać ekran kiedy nie jest używany, ale
również aby zmniejszyć podświetlenie matrycy jeśli to będzie możliwe. Większość
laptopów oferuje kontrolowanie przyciemniania ekranu.
Ustawienia stanu gotowości
Po pierwsze należy sprawdzić czasy oczekiwania, zawieszenia i wyłączenia ekranu.
Ponieważ to zależy silnie od naszego menedżera okien, Wystarczy sprawdzić 2
popularne miejsca: zaczernienie terminala może być ustawione za pomocą
setterm -blank <liczba_minutM>, setterm -powersave on oraz
setterm -powerdown <liczba_minutM>. Dla Xorg, modyfikujemy
/etc/X11/xorg.conf w następujący sposób:
Listing 4.1: Ustawienia zawieszenia dla LCD w X.org i XFree86 |
Section "ServerFlags"
Option "BlankTime" "5"
Option "StandbyTime" "10"
Option "SuspendTime" "20"
Option "OffTime" "30"
[...]
EndSection
[...]
Section "Monitor"
Identifier [...]
Option "DPMS"
[...]
EndSection
|
Zmniejszanie podświetlenia
Prawdopodobnie bardziej istotną sprawą jest zmniejszenie podświetlenia. Jeśli
mamy dostęp do ustawień przyciemniania poprzez jakieś narzędzie, napiszemy mały
skrypt, który będzie zmniejszał podświetlenie w trybie pracy na baterii oraz
osadzimy go w poziomie uruchamiania o nazwie battery. Następujący skrypt
powinien działać na większości Thinkpadów IBM-a oraz laptopach firmy Toshiba. W
pierwszym przypadku należy uaktywnić odpowiednie opcje w jądrze, natomiast przy
laptopach Toshiby zainstalować sys-power/acpitool i nie stosować
poniższej konfiguracji thinkpad_acpi (dawniej zwany ibm_acpi)..
Ostrzeżenie:
Wsparcie ustawiania jasności w thinkpad-acpi jest oznaczone jako
eksperymentalne. Posiada ono bezpośredni dostęp do sprzętu i może spowodować
uszkodzenie komputera. Proszę przeczytać uwagi na stronie domowej thnikpad-acpi.
|
Aby móc ustawić poziom jasności, moduł thinkpad_acpi musi być załadowany z
parametrem eksperymentalnym.
Listing 4.2: Automatyczne ładowanie modułu thinkpad_acpi |
# echo "options thnikpad_acpi experimental=1" >> /etc/modules.d/thnikpad_acpi
# /sbin/update-modules
# echo thnikpad_acpi >> /etc/modules.autoload.d/kernel-2.6
# modprobe thnikpad_acpi
|
To powinno działać bez komunikatów o błędach, plik
/proc/acpi/ibm/brightness powinien być stworzony po załadowaniu
modułu. Skrypt startowy zajmie się wybieraniem jasności w zależności od źródła
zasilania.
Listing 4.3: /etc/conf.d/lcd-brightness |
BRIGHTNESS_AC=7
BRIGHTNESS_BATTERY=4
|
Listing 4.4: /etc/init.d/lcd-brightness |
#!/sbin/runscript
set_brightness() {
if on_ac_power
then
LEVEL=${BRIGHTNESS_AC:-7}
else
LEVEL=${BRIGHTNESS_BATTERY:-4}
fi
if [ -f /proc/acpi/ibm/brightness ]
then
ebegin "Ustawianie jasności LCD"
echo "level ${LEVEL}" > /proc/acpi/ibm/brightness
eend $?
elif [[ -e /usr/bin/acpitool && -n $(acpitool -T | grep "LCD brightness") ]]
then
ebegin "Ustawianie jasności LCD"
acpitool -l $LEVEL >/dev/null || ewarn "Ustawienie jasności niemożliwe"
eend $?
else
ewarn "Regulacja jasności LCD nie jest wspierana."
ewarn "Dla Thinkpadów IBM czy thnikpad_acpi jest załadowane"
ewarn "Dla laptopów Toshiba, należy zainstalować sys-power/acpitool"
fi
}
start() {
set_brightness
}
stop () {
set_brightness
}
|
Kiedy skończymy, należy się upewnić, że jasność jest dobierana automatycznie
poprzez dodanie tego skryptu do poziomu uruchamiania o nazwie "battery".
Listing 4.5: Włączanie automatycznego sterowania jasnością |
# chmod +x /etc/init.d/lcd-brightness
# rc-update add lcd-brightness "battery"
# rc
|
5.
Zarządzanie zasilaniem dla dysku twardego
Dyski twarde zużywają mniej energii w trybie uśpienia. Zatem nabiera sensu
uaktywnienie udogodnień związanych z zachowywaniem energi, gdy dysk nie jest
używany przez dłuższy czas. Poniżej opisane zostały dwa sposoby dokonania tego.
Po pierwsze laptop-mode zachowuje dużo energii spowodowanych kilkoma
sposobami, które powstrzymają nas lub opóźniają dostęp do zapisu na dysku. Wadą
takiego rozwiązania jest to, że przy opóźnionym dostępie do zapisu kernel może
spowodować krytyczne błędy, które mogą być znacznie bardziej niebezpieczne dla
naszych danych. Musimy się zatem najpierw upewnić czy nie mamy uruchomionych
procesów, które regularnie zapisują coś na dysk twardy, a dopiero następnie
możemy uaktywnić udogodnienia związane z zachowaniem energii używając hdparm.
Zwiększanie czasu bezczynności - laptop-mode
Kernele 2.6 zawierają tzw. laptop-mode. Kiedy jest on aktywny, brudne
bufory (ang. Dirty Buffers) są zapisywane na dysk przy odczytywaniu oraz po
każdych 10 lub więcej minutach (a nie 30 sekundach). Minimalizuje to ilość razy,
w których dysk twardy musi być się rozkręcać.
Listing 5.1: Automatyczny start laptop-mode |
# emerge laptop-mode-tools
|
laptop-mode-tools ma swój plik konfiguracyjny w
/etc/laptop-mode/laptop-mode.conf. Należy go dopasować do własnych
upodobań (jest dobrze skomentowany), a następnie wykonać rc-update add
laptop_mode battery aby uruchamiał się zawsze przy starcie systemu.
Ostatnie wersje laptop-mode (1.11 i nowsze) zawierają nowe narzędzie o nazwie
lm-profiler. Monitoruje on użycie dysku oraz działające usługi sieciowe,
oraz sugeruje, które z nich wyłączyć gdy są nie używane. Możemy je wyłączyć
poprzez wbudowane w laptop-mode-tools wsparcie dla poziomów uruchamiania (który
będzie "reverted" przez /sbin/rc/ w Gentoo) lub używając poziomów
default/battery (polecane rozwiązanie).
Listing 5.2: Przykładowe wyjście działającego lm-profiler |
# lm-profiler
Profiling session started.
Time remaining: 600 seconds
[4296896.602000] amarokapp
Time remaining: 599 seconds
[4296897.714000] sort
[4296897.970000] mv
Time remaining: 598 seconds
Time remaining: 597 seconds
[4296900.482000] reiserfs/0
|
Po 10-cio minutowym "testowaniu" naszego systemu, lm-profiler pokaże
listę usług, które w tym czasie wykonywały jakieś operacje na dysku.
Listing 5.3: lm-profiler sugerujący wyłączenie pewnych usług |
Program: "atd"
Reason: standard recommendation (program may not be running)
Init script: /etc/init.d/atd (GUESSED)
Do you want to disable this service in battery mode? [y/N]: n
|
Aby zablokować atd, jak zostało to pokazane w powyższym przykładzie, powinniśmy
uruchomić rc-update del atd battery. Należy być ostrożnym aby przypadkiem
nie wyłączyć usług, które są potrzebne do poprawnego działania systemy -
lm-profiler może czasem wytworzyć złe informacje. Nie należy zatem wyłączać
usług jeżeli nie jesteśmy pewni czy są one potrzebne.
Limitowanie dostępu do zapisu
Jeżeli z jakiegoś powodu nie chcemy używać laptop-mode, musimy trochę się
natrudzić aby zablokować usługi, które zapisują dane na nasz dysk.
syslogd jest dobrym kandydatem aby nam w tym pomóc, Prawdopodobnie nie
chcemy całkowicie go wyłączyć, ale możliwe jest zmodyfikowanie pliku
konfiguracyjnego tak, aby "niepotrzebne" rzeczy nie były logowane a co za tym
idzie nie tworzyły transferu na dysku. Dla przykładu Cups zapisuje co
jakiś czas dane na dysk, więc jedynym rozwiązaniem jest wyłączenie go i ręczne
włączanie jedynie gdy będzie nam potrzebny.
Listing 5.4: Wyłączenie cupsa gdy uruchamiamy z baterii |
# rc-update del cupsd battery
|
Możemy również użyć lm-profiler z pakietu laptop-mode-tools (patrz wyżej)
w celu znalezienia usług do wyłączenia. Kiedy tylko pozbędziemy się ich
wszystkich, możemy zająć się konfiguracją hdparm.
hdparm
Drugą możliwością jest użycie hdparm. Jeśli używamy tryby laptop-mode
należy pominąć ten krok. Jeśli nie, wyedytujmy /etc/conf.d/hdparm i
dodajmy poniższe wartości dla dysku. W tym przypadku dysk jest nazwany
hda.
Listing 5.5: Użycie /etc/conf.d/hdparm dla ustawień dysku |
hda_args="-q -S12"
|
Zarządzanie energią dla dysku zostanie aktywowane. Jeśli kiedykolwiek sytuacja
będzie wymagała jego wyłączenia, w pliku /etc/conf.d/hdparm można
zmienić wartość na -q -S0 lub uruchomić hdparm -q -S0 /dev/hda.
Aby dowiedzieć się o dostępnych opcjach należy spojrzeć do man hdparm.
Chociaż uruchomienie hdparm jest zawsze możliwe poprzez wykonanie
polecenia /etc/init.d/hdparm start, to znacznie łatwiej jest gdy proces
ten przechodzi automatycznie podczas zmiany poziomu uruchamiania. Aby tego
dokonać, należy dodać hdparm do odpowiedniego poziomu uruchamiania.
Listing 5.6: Zautomatyzowanie ustawień stanu oczekiwania dysku |
# rc-update add hdparm battery
|
Ważne:
Należy być ostrożnym z ustawieniami uśpienia lub zmniejszenia obrotów dysków
twardych. Ustawienie tych opcji na zbyt małe wartości może zniszczyć dysk twardy
co spowoduje utratę gwarancji.
|
Inne sztuczki
Inną możliwością jest wyłączenie swapa podczas pracy na bateriach. Przed
napisaniem przełącznika swapa, należy się upewnić, że mamy dostatecznie dużo
pamięci RAM i swap nie jest używany zbyt często, w przeciwnym wypadku możemy
mieć duże problemy.
Jeśli nie chcemy używać laptop-mode, nadal możemy zmniejszyć dostęp do dysku
poprzez zamontowanie pewnych katalogów jako tmpfs - próby zapisu nie są
zachowywane na dysku, ale w głównej pamięci i zostają utracone przy
odmontowywaniu. Często jest użyteczne, aby zamontować w ten sposób
/tmp - nie musimy zwracać szczególnej uwagi, ponieważ zostaje on
skasowany po każdym ponownym uruchomieniu komputera niezależnie czy zamontujemy
go na dysku czy do RAM-u. Należy się jedynie upewnić, że mamy wystarczającą
ilość pamięci oraz, że żaden program (jak klient ściągający lub narzędzie
pakujące) nie potrzebuje dodatkowej przestrzeni w /tmp. Aby to
włączyć, włączamy wsparcie dla tmpfs w jądrze i dodajemy następującą linię do
/etc/fstab:
Listing 5.7: Edytowanie /etc/fstab, aby uczynić /tmp nawet bardziej lotnym |
none /tmp tmpfs size=32m 0 0
|
Ostrzeżenie:
Należy zwrócić uwagę na parametr i zmienić go tak, aby pasował do naszego
systemu. Jeśli nie jesteśmy pewni, wtedy należy w ogóle się za to nie brać, gdyż
może to łatwo stać się wąskim gardłem w wydajności naszego systemu. W przypadku
jeśli chcemy zamontować w ten sposób /var/log, należy się upewnić,
że pliki dziennika są na dysku przed odmontowaniem. Są one niezbędne. Nie należy
montować /var/tmp w ten sposób, gdyż Portage używa tego katalogu
do kompilacji...
|
6.
Zarządzanie zasilaniem dla innych urządzeń
Zarządzanie zasilaniem dla kart graficznych
W przypadku gdy posiadamy kartę graficzną ATI wspierającą PowerPlay (dynamiczne
skalowanie zegara procesora graficznego), możemy uaktywnić je w naszym X.org.
Otwórzmy zatem plik /etc/X11/xorg.conf a następnie dodajmy (lub
uaktywnijmy) opcję DynamicClocks w sekcji "Device". Należy jednak
pamiętać, że to udogodnienie może powodować zawieszanie się niektórych
komputerów.
Listing 6.1: Uaktywnianie wsparcia X.org dla ATI PowerPlay |
Section "Device"
[...]
Option "Dynamic Clocks" "on"
EndSection
|
Zarządzanie zasilaniem dla kart sieci bezprzewodowych
Karty sieci bezprzewodowych również pochłaniają sporo energii. Należy dodać je
do trybu zarządzania zasilaniem tak jak zostało to dokonane w przypadku dysku.
Uwaga:
W poniższym skrypcie zakładamy, że interfejs sieci bezprzewodowej nazywa się
wlan0; jeżeli w naszym przypadku jest inaczej, należy odpowiednio
zmienić to w treści skryptu.
|
Aby automatycznie włączyć zarządzanie energią dla karty bezprzewodowej należy
uaktywnić odpowiednie opcje w /etc/conf.d/net, jak poniżej.
Listing 6.2: Automatyczne zarządzanie energią WLAN |
iwconfig_wlan0="power on"
|
Więcej szczegółów można uzyskać w man iwconfig. Jeśli sterownik i punkt
dostępu wspierają zmianę sygnału, jest możliwość zaoszczędzenia jeszcze większej
ilości energii.
Zarządzanie zasilaniem dla USB
Istnieją dwa główne problemy z urządzeniami USB odnoszące się do pochłaniania
energii: pierwszy, urządzenia jak mysz USB, aparat cyfrowy lub USB sticks
pożerają energię, gdy są podpięte. Nie możemy tego ominąć (nie mniej jednak
należy je odłączyć jeśli nie są potrzebne). Po drugie, kiedy urządzenia USB są
podpięte, wtedy sterownik hosta USB okresowo uzyskuje dostęp do magistrali,
która po kolei zapobiega, aby procesor nie przeszedł stan uśpienia. Jądro
oferuje eksperymentalną opcję do uśpienia urządzeń podłączonych do USB, poprzez
wywołania sterowników z plików power/state znajdujących się w
/sys.
Listing 6.3: Enabling USB suspend support in the kernel |
Device Drivers
USB support
[*] Support for Host-side USB
[*] USB suspend/resume (EXPERIMENTAL)
|
7.
Stany uśpienia: uśpienie, oczekiwanie, suspend to disk
ACPI definiuje różne stany uśpienia. Najważniejszymi są
- S1 alias Oczekiwanie,
- S3 alias Zawieszenie do RAM-u alias Uśpienie,
- S4 alias Zawieszenie na dysk twardy (ang. Suspend-to-Disk) alias
Hibernacja.
Mogą one być wezwane kiedykolwiek system jest bezczynny, ale zamknięcie systemu
nie jest wskazane z powodu długiego czasu ładowania systemu.
Uśpienie (S3)
Wsparcie ACPI dla tych stanów uśpienia jest oznaczone jako eksperymentalne z
prostego powodu. Stany uśpienia APM są bardziej stabilne, jednakże nie możemy
używać APM i ACPI jednocześnie.
Listing 7.1: Konfiguracja jądra dla różnych metod uśpienia |
Power Management Options --->
[*] Power Management support
ACPI (Advanced Configuration and Power Interface) Support --->
[*] ACPI Support
[*] Sleep States
|
Gdy nasz kernel jest poprawnie skonfigurowany, możemy użyć
hibernate-script aby aktywować hibernację lub tryb uśpienia. Najpierw
jednak musimy go zainstalować
Listing 7.2: Instalacja hibernate-script |
# emerge hibernate-script
|
Musimy jeszcze skonfigurować kilka plików w katalogu
/etc/hibernate. Domyślnie pakiet wstawia tam kilka plików
odpowiednio dla każdego stanu uśpienia. Opcje, które są popularne dla wszystkich
metod wstrzymania zostały umieszczone w common.conf; upewnijcie
się, że plik ten jest właściwie ustawiony dla waszego systemu.
Do skonfigurowania uśpienia, edytujemy sysfs-ram.conf w katalogu
/etc/hibernate. UseSysfsPowerState mem jest już dobrze
ustawiona, ale jeżeli chcecie dokonac dalszych zmian do tego konkretnego stanu
uśpienia (lub jakiegokolwiek innego) powinien on zostać dodany do
/etc/hibernate/hibernate.conf. W tej drodze poprowadzą nas
komentarze oraz nazwy odpowiednich opcji. Jeżeli ponadto używamy nfs lub
samby do dzielenia się plikami w sieci, powinniśmy się upewnić aby wyłączyć
niepotrzebne skrypty uruchomieniowe, aby uniknąć opóźnień.
Uwaga:
Aby uzyskać więcej informacji na temat stanów uśpienia przeczytaj man
hibernate.conf.
|
Gotowi? Teraz mamy ostatnią szansę zrobić kopię bezpieczeństwa danych, które
chcemy trzymać po wykonaniu następnej komendy. W celu późniejszego "wybudzenia"
należy wcisnąć jakiś specjalny klawisz (np. Fn).
Listing 7.3: Uśpienie |
# hibernate-ram
|
Jeżeli dalej czytamy ten tekst, wygląda na to, że uśpienie działa poprawnie.
Możemy również ustawić oczekiwanie (S1) w podobny sposób, edytując
sysfs-ram.conf oraz zmieniając "UseSysfsPowerState mem" na
"UseSysfsPowerState standby". S3 oraz S4 są bardziej interesującymi stanami
uśpienia prowadzącymi jednakże do większego oszczędzania energii.
Hibernate (S4)
Ten rozdział pokaże nam czym jest hibernacja, czyli obraz działającego systemu
skopiowany na dysk przez wyłączeniem. Podczas wznawiania, obraz jest ładowany i
możemy zacząć działać dokładnie od tego samego punktu, w którym poprzednio
wywołaliśmy hibernację.
Ostrzeżenie:
Nie należy zmieniać sprzętu, który nie jest "hot-pluggable" podczas hibernacji.
Nie należy też ładować obrazu z innym jądrem niż to, które zostało użyte do
hibernowania. Trzeba również wyłączyć klient/serwer NFS lub Samby przed
hibernacją.
|
Obecnie istnieją dwie różne implementacje dla S4. Oryginalnym jest swsusp,
potem nowszy tuxonice (dawny suspend2), który ma najładniejszy interfejs
(zwierając wsparcie dla fbsplasha). Porównanie udogodnień
jest dostępne na stronie domowej projektu
suspend2. Dodatkowo istniało również zawieszenie na dysk
(Suspend-to-Disk, pmdisk) - rozwidlenie swsusp, ale jego rozwój został
wstrzymany.
TuxOnIce nie jest jeszcze oficjalnie włączone do głównych źródeł jądra, trzeba
nałożyć na nie odpowiednie łatki, które możemy znaleźć na tuxonice.net lub użyć
sys-kernel/tuxonice-sources
Jądro dla swsusp i tuxonice należy ustawić następująco:
Listing 7.4: Konfiguracja jądra dla różnych typów zawieszeń |
Power Management Options --->
[*] Software Suspend
(/dev/SWAP) Default resume partition
Enhanced Hibernation (TuxOnIce)
--- Image Storage (you need at least one writer)
[*] File Writer
[*] Swap Writer
--- General Options
[*] LZF image compression
(/dev/SWAP) Domyślna nazwa urządzenia wznowienia
[ ] Allow Keep Image Mode
|
Konfiguracja sla swsusp jest raczej prosta. Jeżeli nie ustawiliśmy lokalizacji
partycji swap w konfiguracji jądra, możemy ją dodać jako parametr jądra podczas
uruchomienia (resume=/dev/SWAP). Jeżeli uruchomienie nie jest możliwe,
ponieważ obraz jest zepsuty, należy użyć parametru noresume. Skrypt
uruchomieniowy hibernate-cleanup unieważnia obrazy swsusp podczas
uruchamiania.
Listing 7.5: Unieważnienie obrazów podczas uruchomienia |
# rc-update add hibernate-cleanup boot
|
Aby uaktywnić hibernację z swsusp, trzeba użyć skryptu hibernate oraz ustawić
UseSysfsPowerState disk w /etc/hibernate/sysfs-disk
Ostrzeżenie:
Należy zrobić kopię zapasową danych przed wykonaniem tych poleceń. Wykonujemy
sync przed uruchomieniem jednego z poleceń, aby dane zostały zapisane na
dysku. Najpierw próbujemy tego na zewnątrz środowiska X, dopiero potem wewnątrz
X, ale jako niezalogowani.
|
Jeśli wyświetli nam się komunikat o spanikowaniu jądra z powodu uhci lub
czegoś podobnego, wtedy należy skompilować wsparcie dla USB jako moduł i
usunąć go z pamięci przed uśpieniem laptopa. Opcje konfiguracyjne możemy znaleźć
w common.conf
Listing 7.6: Hibernacja z swsusp |
# nano -w /etc/hibernate/common.conf
# hibernate
|
Poniższy nagłówek opisuje ustawienie TuxOnIce włączając w to wsparcie dla
fbsplash, dla ładnego, graficznego pasku postępu hibernacji i wznawiania.
Pierwsza część konfiguracji jest podobna do konfiguracji swsusp. Podobnie jak
tam, jeżeli nie podamy lokacji partycji swap w konfiguracji jądra, możemy ją
dodać jako parametr jądra (resume2=swap:/dev/SWAP). Jeżeli z powodu
uszkodzonego obrazu nie możemy załadować systemu należy dodać parametr
noresume. Dodatkowo skrypt hibernate-cleanup unieważnia obrazy
TuxOnIce podczas uruchamiania.
Listing 7.7: Unieważnianie obrazów TuxOnIce podczas procesu uruchamiania |
# rc-update add hiberante-cleanup boot
|
Teraz należy odpowiednio wyedytować /etc/hiberante/suspend2.conf,
uaktywniając opcje TuxOnIce, które są nam potrzebne. Na razie jednak nie
uaktualniajmy części o fbsplash w common.conf.
Listing 7.8: Hibernacja z TuxOnIce |
# nano -w /etc/hibernate/suspend2.conf
# hibernate
|
Należy skonfigurować fbsplash teraz, jeżeli jeszcze tego nie zrobiliśmy.
Aby uaktywnić wsparcie dla fbsplash podczas hibernacji, potrzebujemy pakietu
sys-apps/tuxonice-userui. Dodatkowo, musimy odblokować flagę USE
fbsplash.
Listing 7.9: Instalacja tuxonice-userui |
# echo sys-apps/tuxonice-userui fbsplash >> /etc/portage/package.use
# echo "sys-apps/tuxonice-userui" >> /etc/portage/package.keywords
# emerge tuxonice-userui
|
Po instalacji dostajemy informację o konieczności zrobienia dowiązania
symbolicznego to motywu, którego chcemy użyć. Np, aby użyć motywu
livecd-2005.1, powinniśmy wykonać poniższe komendy:
Listing 7.10: Używanie motywu livecd-2005.1 podczas hibernacji |
# ln -sfn /etc/splash/livecd-2005-1 /etc/splash/suspend2
|
Jeżeli chcemy czarnego ekranu w pierwszej części procesu wznawiania, powinniśmy
dodać narzędzie tuxoniceui_fbsplash do naszego obrazu initrd. Zakładając,
że stworzyliśmy obraz wykorzystując splash_geninitramfs i zapisaliśmy
jako /boot/fbsplash-emergence-1024x768, znajdziemy poniżej
informacje jak tego dokonać.
Listing 7.11: Adding tuxoniceui_fbsplash to an initrd image |
# mount /boot
# mkdir ~/initrd.d
# cp /boot/fbsplash-emergence-1024x768 ~/initrd.d/
# cd ~/initrd.d
# gunzip -c fbsplash-emergence-1024x768 | cpio -idm --quiet -H newc
# rm fbsplash-emergence-1024x768
# cp /usr/sbin/tuxoniceui_fbsplash sbin/
# find . | cpio --quiet --dereference -o -H newc | gzip -9 > /boot/fbsplash-tuxonice-emergence-1024x768
|
Pozostaje nam jeszcze tylko przekonfigurowanie grub.conf (lub
lilo.conf) aby nasz kernel używał
/boot/fbsplash-tuxonice-emergence-1024x768 jako obrazu initrd.
Teraz możemy na sucho przetestować czy wszystko zostało ustawione poprawnie
Listing 7.12: Test hibernacji z fbsplash |
# tuxoniceui_fbsplash -t
|
Jeżeli wszystko działa dobrze, możemy ponownie otworzyć
/etc/hibernate/common.conf i uaktywnić wszystkie opcje związane
z fbsplash. Po tym możemy już uruchomić hibernate i podziwiać hibernacje
z użyciem fbsplash
8.
Rozwiązywanie problemów
P:Próbując zmienić częstotliwość CPU, wyświetlany jest komunikat, że
/sys/devices/system/cpu/cpu0/cpufreq/scaling_regulator nie
istnieje.
O: Należy się upewnić, że nasz procesor wspiera skalowanie częstotliwości
oraz, że wybraliśmy odpowiedni sterownik CPUFreq dla naszego procesora. Poniżej
znajduje się lista procesorów wspieranych przez CPUFreq (jądro 2.6.7): ARM
Integrator, ARM-SA1100, ARM-SA1110, AMD Elan - SC400, SC410, AMD mobile K6-2+,
AMD mobile K6-3+, AMD mobile Duron, AMD mobile Athlon, AMD Opteron, AMD Athlon
64, Cyrix Media GXm, Intel mobile PIII i Intel mobile PIII-M na pewnych
chipsetach, Intel Pentium 4, Intel Xeon, Intel Pentium M (Centrino), National
Semiconductors Geode GX, Transmeta Crusoe, VIA Cyrix 3 / C3, UltraSPARC-III,
SuperH SH-3, SH-4, kilka "PowerBook" i "iBook2" oraz różne procesory zgodne z
systemami ACPI 2.0 (tylko jeśli "ACPI Processor Performance States" są dostępne
w interfejsie ACPI/BIOS).
P: Laptop wspiera skalowanie częstotliwości, ale
/sys/devices/system/cpu/cpu0/cpufreq/ jest pusty.
O: Należy poszukać komunikatów o błędach ACPI za pomocą dmesg | grep
ACPI. Należy uaktualnić BIOS, szczególnie jeśli jest raportowany zepsuty
DSDT. Możemy również naprawić to samemu (co wykracza poza ten przewodnik).
P: Laptop wspiera skalowanie częstotliwości, ale według /proc/cpuinfo
prędkość nigdy się nie zmienia.
O: Prawdopodobnie włączyliśmy wsparcie dla symmetric multiprocessing
support (CONFIG_SMP) w jądrze. Należy to wyłączyć i wszystko powinno działać.
Niektóre starsze jądra posiadały powodujący to błąd. W takim przypadku
wykonujemy emerge x86info, aktualizujemy jądro gdy zostaniemy o to
zapytani i sprawdzamy częstotliwość za pomocą x86info -mhz.
P: Częstotliwość CPU może być zmieniana, ale jej zakres nie jest tak
szeroki jak w innym systemie operacyjnym.
O: Możemy połączyć skalowanie częstotliwości z przepustnicą ACPI, aby
otrzymać niższą minimalną częstotliwość. Zauważmy, że przepustnica nie
zachowuje wiele energii i głównie jest używana do zarządzania temperaturą
(utrzymując laptop cichym i chłodnym). Możemy uzyskać obecny stan przepustnicy
za pomocą cat /proc/acpi/processor/CPU/throttling i zmienić go
wykonując echo -n "0:x" > /proc/acpi/processor/CPU/limit, gdzie x jest
jednym ze stanów Tx wyszczególnionych w
/proc/acpi/processor/CPU/throttling.
P: Konfigurując jądro regulatory powersave, performance i userspace
pojawiają się, ale brakuje ondemand. Gdzie go można znaleźć?
O: Regulator ondemand jest tylko dołączony do ostatnich źródeł jąder.
Należy uaktualnić jądro.
P: Żywotność baterii się pogorszyła.
O: Sprawdzamy ustawienia w BIOS-ie. Może zapomnieliśmy, ponownie
włączyć niektóre opcje.
P: Bateria jest w pełni naładowana, ale KDE wyświetla, że pozostało 0%
i natychmiastowo zamyka system.
O: Sprawdzamy wsparcie baterii wkompilowane w jądro. Jeśli używamy go
jako modułu, należy się upewnić, że jest on załadowany.
P: Program logujący pokazuje komunikaty tj. "logger: ACPI group batter /
action battery is not defined".
O: Ten komunikat jest generowany przez skrypt
/etc/acpi/default.sh, który jest dostarczany z acpid. Możemy bez
żadnych konsekwencji je zignorować. Jeżeli jednak chcemy się ich pozbyć,
możemy to zrobić poprzez zakomentowanie odpowiedniej linii w pliku
/etc/acpi/default.sh:
Listing 8.1: Wyłączenie ostrzerzeń o nieznanych zdarzeniach acpi |
*) # logger "ACPI action $action is not defined"
|
P: Posiadacze laptopów Dell Inspiron 51XX. Nie występują zdarzenia
ACPI.
O: Wygląda na błąd w jądrze. Przeczytajmy o tym tutaj.
P: Uaktywniłem opcję DynamicClocks w xorg.conf i
teraz X.org pada / Ekran jest cały czarny / mój laptop nie wyłącza się
poprawnie.
O: Dzieje się tak na niektórych systemach. Rozwiązaniem jest wyłączenie
DynamicClocks.
P: Chcę użyć TuxOnIce, ale dostaję komunikat, że moja partycja swap jest
za mała. Rozszerzenie nie wchodzi w grę.
O: Jeżeli mamy wystarczająco dużo wolnego miejsca na dysku, możemy użyć
zapisu do pliku, zamiast do partycji swap. hibernate-script radzi sobie z
tym całkiem dobrze. Więcej informacji na ten temat możemy znaleźć w
/usr/src/linux/Documentation/power/tuxonice.txt.
P: Nowo zakupiona bateria starcza ledwo na kilka minut! Co jest nie
tak?
O: Najpierw należy podążyć za wskazówkami producenta o tym jak
poprawnie naładować baterię.
P: Powyższe nie pomogło. Co wtedy?
O: Niektóre baterie sprzedawane jako "nowe" są w rzeczywistości stare.
Proszę spróbować:
Listing 8.2: Zapytanie o stan baterii |
$ grep capacity /proc/acpi/battery/BAT0/info
design capacity: 47520 mWh
last full capacity: 41830 mWh
|
Jeśli "last full capacity" różni się znacznie od "design capacity", wtedy
bateria prawdopodobnie jest zepsuta. Proszę spróbować wymiany gwarancyjnej.
P: Naszego problemu nie ma powyżej. Co dalej?
O: Po pierwsze nie bać się kontaktu ze mną, Dennis Nienhüser. Fora Gentoo są również bardzo dobrym
miejscem na uzyskanie pomocy. Jeżeli wolimy kontaktować się przez IRC, pomoc
możemy uzyskać na kanale #gentoo-laptop w sieci irc.freenode.net.
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|