Tuningovanie power managementu v notebookoch ThinkPad (I)

V dnešnom poste Vám ukážem, ako využiť naplno možnosti správy napájania v notebookoch ThinkPad pod OS Linux. Tento článok vyšiel už dávnejšie na starom blogu blog.it-admin.sk, ale je pomerne zaujímavý a stojí za recyklovanie.Počas roka sa v mojej domácnosti akýmsi zvláštnym spôsobom nahromadili cca 3 takéto notebooky – môj X31, ktorý používam pracovne, priateľkin T61 a občasný cezpoľný T23 z roboty na dočasné práce. Keďže sa jedná o notebooky, ktoré sú aspoň podľa mňa výrobcom veľmi dobré spracované, začal som sa hrabať v ich systémovom vnútri s cieľom dostať z nich čo najviac, najmä čo sa týka regulovania spotreby. Pri práci som dosť čerpal z ThinkWiki a z hlášok programu powertop.

ThinkPad X31

Prvý z notebookov je ultraprenosný ThinkPad X31, ktorý sa ku mne dostal už mierne HW upgradovaný. Operačná pamäť zväčšená na 1 GB, disk upgradovaný na 80 GB, pôvodná wi-fi karta od Intel-u uvoľnila miesto viacúčelovejšiej karte Wistron CM9 a do dockstation zavítala multi DVD mechanika. Pôvodná baterka dosahuje síce už len cca 50% svojej konštrukčnej kapacity, no stále ponúka niečo cez 2 hodiny práce. Z toho vyplýva, že “fungel” nová baterka dokáže tohto trpaslíka držať pri živote viac ako 4 hodiny, plus uvažujúc použitie rovnakej baterky v dockstation sa doba práce zvyšuje na cca 8 hodín. A to ani nehovorím o možnosti pripojiť ďalšiu baterku cez UltraBay slot :). Človek by si pomyslel, že pri takejto zásobe energie tomuto notebooku nie je čo vytknúť. Ale predsa sa dá niečo zlepšiť.

Regulácia otáčok ventilátora

Pre mňa je dosť nešťastne riešená regulácia otáčok systémového ventilátora, ktorý sa točí v niekoľkých rýchlostných úrovniach podľa aktuálnej teploty. To je pomerne nepohodlné, pretože ventilátor stále hučí, aj pri najnižšej rýchlosti. Nehovoriac o tom, že má tendenciu dobre nasávať prach a takto zaprášený hučí ešte viac. Neostáva nič iné, ako ho z času na čas povysávať. Riešenie spočíva v malom skripte, ktorý sa spustí po štarte systému. Ten kontroluje teplotu vo vnútri tela notebooku, ktorá keď sa zvýši nad určitú hodnotu (v mojom prípade 55°C), skript pustí ventilátor na plné otáčky a po ochladení na inú úroveň (v mojom prípade 42°C) ho vypne. Pri použití takéhoto riešenia spolu s powersave CPU governorom sa ventilátor spúšta naozaj sporadicky a vnútorná teplota notebooku ostáva stále v norme. Najväčší dopad však je na výdrž baterky. O koľko percent to je, to nechávam na čitateľov, ktorí si chcuú preveriť, že neklamem :).

Čo potrebujeme na dosiahnutie podobného stavu? Celá konfigurácia je otestovaná pod distribúciou Ubuntu 8.10, ale s minimálnymi obmenami by mala fungovať aj inde.

V prvom rade musíme vytvoriť súbor /etc/modprobe.d a nazvime ho trebárs ibm. To nám zaručí, že aj v prípade upgradu systému ho nová verzia balíčku neprepíše, ako by sa to stalo v prípade, že by sme jeho obsah narvali do súboru options. V ňom sa nachádzajú parametre jednotlivých zavádzaných modulov. Totiž modul thinkpad_acpi, má vyššie spomínanú funkcionalitu takpovediac skytú a označuje sa za experimentálnu. Prečo, to neviem, ale za celý čas používania tohto riešenia som neprišiel do stretu s problémami súvisiacimi s týmto modulom. Do tohto súboru pridajte riadok, ktorý vyzerá nasledovne:

options thinkpad_acpi fan_control=1 experimental=1

Následne, ako root znovu zavedieme modul thinkpad_acpi, ktorý sa načíta už aj s podporou regulácie otáčok.

# modprobe -r thinkpad_acpi
# modprobe thinkpad_acpi

To si môžeme hneď aj vyskúšať. V /proc/acpi/ibm je súbor fan, do ktorého môžeme zapisovať príkazy s určitou syntaxou, čo sa odzrkadlí na rýchlosti ventilátora. Trebárs

# echo level 7 > /proc/acpi/ibm/fan

pustí ventilátor na plné otáčky. Level môže nadobúdať hodnoty 0 až 7, pričom 0 znamená žiadne a 7 najvyššie otáčky ventilátora. Ak chceme opäť regulovať otáčky automaticky, stačí mu namiesto level 7 podsunúť toto:

# echo level auto > /proc/acpi/ibm/fan

Aby sa modul korektne načítal aj po spustení systému, na spomeňte ho na konci súboru /etc/modules. Prvý krok by sme mali. Teraz si pod rootom vytvoríme súbor v /usr/local/sbin súbor a nazvime ho trebárs cpufan.sh. Jeho obsah je nasledovný:

#!/bin/bash

IBM_ACPI=/proc/acpi/ibm
THERMOMETER=$IBM_ACPI/thermal
FAN=$IBM_ACPI/fan
MAXTRIPPOINT=55
MINTRIPPOINT=42
TRIPPOINT=$MINTRIPPOINT

echo fancontrol: Current `awk '{print $2}' < $THERMOMETER`
echo fancontrol: Controlling temperatures between $MINTRIPPOINT and $MAXTRIPPOINT degrees.

# Make sure the fan is turned on when the script crashes or is killed
trap "echo level 7 > $FAN; exit 0" HUP KILL INT ABRT STOP QUIT SEGV TERM

#exit 0

while [ 1 ];
do
        TEMPERATURE=`awk '{print $2}' < $THERMOMETER`
        if [ $TEMPERATURE -le $TRIPPOINT ]; then
            command=disable
            TRIPPOINT=$MAXTRIPPOINT
        else
            command=enable
            TRIPPOINT=$MINTRIPPOINT
        fi
        echo $command > $FAN
        # Temperature ramps up quickly, so pick this not too large:
        sleep 5
done

Súboru nastavíme pomocou chmod príznak spustiteľnosti a editujeme súbor /etc/rc.local. Na jeho koniec pridáme volanie horeuvedeného skriptu:

/usr/local/sbin/cpufan.sh &

Nabudúce

V ďalšom dieli si povieme niečo o SMAPI a ukážeme si, ako s ním predĺžiť životnosť baterky …

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *