Az Értsük meg sorozat újabb részét olvasod. A load average értékének, majd a swappiness működésének kivesézése után ebben a részben megpróbálom érthetően elmagyarázni, mi történik akkor, amikor a rendszert elküldöd aludni.
Minden rossz forrása: az ACPI
A modern rendszerek energiakezelése az ACPI interfészen (azaz Advanced Configuration and Power Interface) keresztül történik, melyet több cég együttesen tervezett. Ez tartalmazza a hardverinformációkat, illetve az alvás/felébredés (és hibernálás) folyamatához szükséges technikai részleteket.
Elméletben minden ACPI kompatibilis eszköznek (azaz gyakorlatilag minden hagyományos számítógépnek) pontosan be kellene tartania az előírásokat. Gyakorlatilag ez sokszor nem vagy nem jól valósul meg, így keletkeznek a problémák. Linus Torvalds szerint „az ACPI tervezése minden tekintetben egy katasztrófa”. Alan Cox, Linux kernel fejlesztő aggodalmát fejezte ki az ACPI specifikáció bonyolultságával kapcsolatban, de az sem tetszik neki, hogy a szabvány miatt egy külső forrásból származó kódot kell a kernelnek teljes jogosultsággal futtatna. Mark Shuttleworth egyenesen a trójai falovakhoz hasonlította az ACPI-t.
Hogy visszatérjek a rendszer alvásához: mivel a teljes folyamatban kulcsfontosságú az ACPI (helyes) működése, ezért a különböző implementációk gondjai keresztbe tehetnek.
Az altatás folyamata
Ahhoz, hogy a gép elaludhasson, először konfigurálni kell egy eseményt, amelyre az felébred. Ahogy nálad ez az esemény az ébresztőóra, a gépnél ez lehet egy gomb megnyomása (praktikusan ugye a bekapcsológomb) vagy a billentyűzeten valamelyik gomb leütése, laptopok esetén ez pedig ugye általában kijelző felnyitása. Lehetséges ennél speciálisabb eset is: bizonyos BIOS (vagy UEFI) rendszerek megengedik, hogy a számítógép minden nap egy adott időben kapcsoljon be (vagy ébredjen fel álmából). Ahogy az is kiválthat egy eseményt, ha speciális üzenetet küldünk a hálózati kártyára (WoL: Wakeup on Lan).
Az ébresztés eseményét automatikusan konfigurálja neked a rendszer, de az elérhető eseményforrásokat megtekintheted, ha kiadod a cat /proc/acpi/wakeup
parancsot terminálban.
- A rendszer logikailag leválasztja az összes elérhető processzort (és processzormagot), kivéve azt az egyet, amellyel elindult a rendszer.
- Leállítja az eszközöket. Meghívja a suspend() függvényeket, amely elmenti a konfigurációs regisztereket, majd belép a D3 állapotba, ahol 0 vagy megközelítőleg 0 energiát fogyaszt.
- Kiolvassa az ACPI FADT (fix című leírótábla) táblából a „varázslatos címeket”.
- Ezeket a címeket felhasználva, módosítja az ACPI regisztereket.
- A BIOS úgynevezett „rendszer menedzsment” módba kapcsol, hogy közvetlenül kommunikáljon a hardverrel.
A rendszer menedzsment módnak két állapota van: A PTS, mikor felkészül az alvásra, és a GTS, mikor végrehajtja az alvást. GTS állapotban a géptől függően a BIOS akár meg is szüntetheti bizonyos komponensek áramellátását.
Az ébredés folyamata
Ez eddig viszonylag sima ügy, általában menni is szokott. Ami problematikus, az az ébredés:
- Az előzőleg bekonfigurált ébresztési esemény megtörténik (csörög az ébresztőóra).
- A BIOS ellenőrzi, hogy ébredés vagy új rendszerindítás történik-e.
- A BIOS lefuttatja a kernel ébredéshez szükséges kódját.
- Az eszközök D0, azaz működő állapotba lépnek.
- Bizonyos konfigurációs regisztereket az alvás előtti értékre állítanak.
- Az ébresztés elején logikailag leválasztott CPU-k most beillesztésre kerülnek.
Altatás felhasználó közelebbi szinten
A fenti folyamat történik a rendszer szintjén. Ha egy kicsit a felhasználóhoz közelebbi szinte szeretnénk tekinteni, akkor azokat a folyamatokat látod, melyek még azelőtt futnak le, mielőtt a kernel elkezdené a valódi altatási procedúrát.
Magában a teljes altatási folyamatban, ezek a fő komponensek vannak, ilyen sorrendben használva:
- gnome-power-manager
- udev
- /sys/power/state
- kernel
- BIOS
ACPI állapotok
Néhány szó az ACPI állapotokról:
- S1: Készenléti állapot, a processzor leáll, de minden részegységnek van áramellátása.
- S2: Jelentéktelen, mivel sosem lett kész, ugyanaz, mint az S3.
- S3: Ezt nevezzük alvó állapotnak. A processzor állapotát kimentjük a memóriába és a gép legtöbb eszközét kikapcsoljuk.
- S4: Hibernálásként ismerheted. A memóriát és a processzor állapotát kimentjük a lemezre, majd gyakorlatilag mindent kikapcsolunk a gépben, pont úgy, mintha csak leállítottad volna. Indításkor a kimentett adatokat olvassuk be, és így kapod vissza a munkakörnyezeted.
- S4+: Hibrid alvás, nem szabványos állapot és nem minden operációs rendszer támogatja: Ötvözi a hibernáció és az alvó állapot előnyeit. Az alvó rendszer azért sérülékeny, mert ha elmegy az áram, vagy lemerül az akkumulátor, akkor elvész a munkameneted, mert törlődik a memória tartalma. A hibernáció pedig relatív lassú indítást tesz lehetővé, mivel be kell olvasni a háttértárról a munkamenet információit.
A hibrid alvás egyszerre altat és hibernál is. Normál esetben a gép S3, azaz alvó állapotba kerül amellett, hogy az S4, azaz hibernáláshoz szükséges minden információt kiment a rendszer a háttértárra. Más szóval, ha altattad a géped, de elment az áram, akkor sincs gond, hiszen bár a memória tartalma törlődött, a háttértáron minden megvan, így ott folytathatod a munkameneted, ahol abbahagytad.
- S5: Teljes leállás.
Ha nem megy az altatás…
Az általában elég nagy nyűg szokott lenni. A fő bűnös a videokártya szokott lenni, vagy azok az eszközök, amelyek illesztőprogramja zárt.
Ez esetben próbálj zárt illesztőprogram nélkül altatni. Más szóval, ha nVidia (nvidia* modul) vagy AMD (Radeon Technologies, fglrx modul) zárt illesztőprogramokat használsz, akkor ideje kipróbálnod a nyíltakat, ami nVidia esetén a nouveou, AMD-nél a radeon.
Ez minden, amit felhasználóként tehetsz. A haladó eszközök használata és az altatás folyamatának visszakövetése majd talán egy másik cikk tartalma lesz.