Energiahasználat optimalizálása linuxos notebookon

Címkék

Lassan egy éve van notebookom. Azóta foglalkoztat az a kérdés, hogyan lehet automatikusan finomhangolni a notebook energia fogyasztását, attól függően, hogy hálózati ellátásról vagy saját akkumulátoráról működik. Erre a célra vannak már meglévő megoldások, például a Gnome Power Manager, azonban én más megoldást kerestem.

Alapvetően három dolog motivált.

  1. Notebook merevlemez idegesítő kattogása, illetve ennek megszüntetése.
    Erről több topik is született már itt a HUP-on. Nem feltétlen hardver hibára kell gondolni a kattogás alatt. A notebook merevlemez energiagazdálkodás céljából X másodpercenként lekapcsolja magát, azonban mivel naplózó fájlrendszert használok (ext3), a naplókhoz legalább 5 másodpercenként hozzányúl a rendszer, ergo a lemez visszakapcsol. IMHO viszonylag hamar le lehet rövidíteni a merevlemez élettartamát napi pár száz ki- bekapcsolással. Jó lenne ezt a folyamatot is szabályozni.
  2. Ha kell a "lóerő" akkor az álljon rendelkezésemre. :)
    Azért vettem notebookot, hogy használjam. Ergo a túlzott korlátozásnak nálam nincs helye, nem egy a fogyasztás érdekében "visszafogott" gépre van szükségem, hanem egy olyanra, amely azt nyújtja amit elvárok tőle.
  3. Tetszőlegesen állítható dolgokat akartam, lehetőleg valami szkript formájában.
    Az utolsó pontról annyit, hogy jobb szeretem, ha a egy program csak azt csinálja amit én akarok, akkor amikor én akarom, és lehetőleg grafikus felülettől függetlenül működjön. Plusz egyedi igényeket is képes legyen lekezelni.

A következő lépéseket követtem el az ügy érdekében.

  1. Hardveres hangolás.
    Elsősorban BIOS szinten engedélyezett ACPI és HPET beállításokra van szükségünk. Mivel ahány hardver annyi féle beállítás, tételezzük fel, hogy ezen mindenki túl van :)
  2. Kernel szintű buherálás
    Itt elsősorban a HPET, Tickless kernel és "CPU frequency scaling" beállításokra gondolok. Ezek is kellőképpen dokumentáltak, de azért leírom (lásd cikk végén), hogy én milyen beállításokat használtam a kernelben.
  3. Tesztelés Powertop-pal
    A fogyasztás aktuális állapotát és a másodpercenkénti felébredések számát a powertop segítségével monitoroztam. Ez azért is hasznos mivel a program használata során rengeteg tippet ad, amivel befolyásolhatjuk a rendszerünk energia használatát. Célszerű ezeket a tippeket megvalósítani! A powertop-ról többek közt itt olvashatunk bővebben.
  4. Userspace alkalmazás
    Igazából ez itt a "saját munka". Ez a szkript végzi el a finomhangolást. Egyrészt lefut minden bootkor, másrészt maga az acpi démon is elindítja két bizonyos esemény bekövetkeztekor. Amikor hálózati feszültségre dugom a gépet, illetve ha lehúzom arról.

    A szkript 3 fájlból áll:
    /etc/acpi/actions/standby_hdd.sh (chmod 755 !)
    /etc/acpi/events/pmg_ac_adapter
    /etc/acpi/events/pmg_battery

    A telepítése ezt követően csak ennyi (Gentoo Linux rendszeren):
    echo "/etc/acpi/actions/standby_hdd.sh && echo" >> /etc/conf.d/local.start
    rc-update add acpid boot

Tesztkörnyezet
Az alábbi beállításokat egy "AMD Turion(tm) 64 X2 Mobile Technology TL-52" processzorral ellátott Asus A6M szériás notebookon követtem el.
Szoftver környezet az alábbi lényeges részekből áll fel:

  • Gentoo Linux - 32 bit / 2007.0 profil
  • sys-kernel/gentoo-sources-2.6.24-r3 (2.6.24.3 vanilla + gentoo patchset)
  • sys-power/acpid-1.0.6-r1
  • sys-power/powermgmt-base-1.22 (ebben a csomagban található az on_ac_power parancs)
  • sys-apps/hdparm-7.7
  • gnome-base/gnome-applets-2.20.1 (cpufreq-selector ebben található)

Felhasznált irodalom
A szkript írásakor nagy segítségemre voltak a már eddig feljebb is belinkelt oldalak, valamint a Gentoo Power Management Guide és a Gentoo Wiki. :)

A szkriptek és egyék kiegészítő fájlok.
A szkript arra épít, hogy meghív egy segédprogramot -ez lenne az on_ac_power-, amelynek a lehetséges kimenetelei (1 / 0) azt mondják meg, hogy a notebook hálózatról vagy akkumulátorról működik. A továbbiakban már ennek függvényében cselekszik. Sok mindent nem csinál. Egyrészt a hdparm segítségével beállítja a merevlemez energia gazdálkodását, kiválasztja az illő CPU órajel ütemezőt (governor) illetve pár dolgot állít még a /proc fájlrendszeren keresztül.

Terjedelmi és technikai okok miatt nem tudtam beilleszteni a fájlokat, ezért akit érdekel, az egy tar.gz-ben letöltheti innen.

Hozzászólások

sokat szórakozhattál ezekkel, nekem nem lenne hozzá kitartásom.
laptopom kattogó hangját még sosem hallottam.

nálam még benne van a szkriptben a képernyő brightnessének fel vagy leállítása, amikor bedugom vagy kihúzom az AC hálózatból. (ezt AFAIK csak gyártófüggő módszerekkel lehet megcsinálni).

amúgy én azt sajnálom, hogy AMD64es laptokokon általában a dynticks felejtős, utánaolvasva pedig a developerek hozzáállása az, hogy erre nincs "energia", vegyek inkább inteles laptopot. hát a következő valószínűleg az lesz, de most ez van.