PDA

Visualizza la versione completa : PORTATILI: Ridurre i consumi della batteria


GiorgioM
05-01-2004, 16:22
Breve HOWTO per utilizzare una delle nuove funzioni del kernel 2.6: cpufreq
Detto terra terra è un sistema per modificare il clock e il voltaggio del processore al volo.
Queste modifiche ovviamente sono fatte a livello kernel ed è per questo che, se non lo avete già fatto, è necessaria una compilazione dei moduli aggiuntivi di cpufreq.

Ci sono due brevi cose da sapere a questo punto: i governor e le cpu frequency table.
I governor sono i comportamenti che il kernel adotterà a seconda del carico della cpu. Ci sono 3 governor: performance, powersave e userspace.
performance: il kernel metterà il processore al massimo del cloccaggio
powersave: il kernel metterà il processore al minimo del cloccaggio
userspace: il cloccaggio del processore è definito dall'utente.
Per quanto riguarda le frequency table ce ne sono di diverse per ogni tipo di processore. Occorre abilitarne una a seconda del processore. Ad esempio con un P4 Mobile ho abilitato p4-clockmod.

Configurare il kernel come da immagine, facendo attenzione a scegliere la frequency table corretta.
http://pollycoke.org/images/cpufreqd.jpg

Compilare e installare i moduli (io consiglio di modularizzare il tutto, se preferite inserite il supporto statisticamente)
Caricare cpufreq_userspace, cpufreq_powersave e il modulo per la frequency table.

Ora guardate sotto la dir /sys/devices/system/cpu/cpu0/cpufreq/

# ls /sys/devices/system/cpu/cpu0/cpufreq/
cpuinfo_max_freq scaling_available_governors scaling_max_freq
cpuinfo_min_freq scaling_driver scaling_min_freq
scaling_available_frequencies scaling_governor scaling_setspeed

Se cattate ogni singolo file ci sono i valori impostati. Con echo è possibile modificare questi valori.

Ora bisogna scegliere un demone che controlla in userspace il cloccaggio della cpu, a seconda di quanto questa suda :D
Io ne ho provati 3: cpudyn, cpufreqd e speedfreq.
Tra i tre io preferisco speedfreq perchè ha una feature che gli altri non hanno: il programma mette la cpu alla velocità minima e solo se necessario (l'app guarda se la cpu è tra l'80% e il 100% di carico e se rimane per oltre 2 secondi, alza piano piano il clock fino a che la potenza è sufficiente per far scendere il carico; quando la cpu torna a dormire, speedfreq abbassa subito la velocità della cpu)

Mettendo in pratica, i passaggi da fare sono:
scaricare speedfreq da http://www.goop.org/~jeremy/speedfreq/ compilare e installare.
Aggiungere uno script che al boot carichi speedfreq (speedfreqd -p dynamic).
Ultima cosa, è possibile scegliere una velocità sotto il quale non andare; ad esempio il mio processore 2.4 Ghz veniva messo a 300 Mhz se non era sotto sforzo! Un po' pochino :stordita:
# cat scaling_available_frequencies
298897 597795 896692 1195590 1494487 1793385 2092282 2391180
# echo "896692" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq

In questo modo la cpu viaggia minimo a 900 Mhz

Per verificare che tutto funzioni, usare speedfreq -m
Mostra in tempo reale la velocità della cpu.

# speedfreq -m
CPU new speed 896 MHz, 0% idle
CPU new speed 896 MHz, 0% idle
CPU new speed 1195 MHz, 0% idle
CPU new speed 1195 MHz, 20.0244% idle
CPU new speed 1195 MHz, 0% idle
CPU new speed 1494 MHz, 0% idle
CPU new speed 1494 MHz, 0% idle
CPU new speed 1494 MHz, 0% idle
CPU new speed 1793 MHz, 0% idle
CPU new speed 1793 MHz, 0% idle
CPU new speed 1793 MHz, 10.0122% idle
CPU new speed 2092 MHz, 0% idle
CPU new speed 2092 MHz, 0% idle
CPU new speed 2092 MHz, 0% idle
CPU new speed 2391 MHz, 0% idle
CPU new speed 2092 MHz, 100% idle
CPU new speed 2092 MHz, 94.878% idle
CPU new speed 2092 MHz, 94.7301% idle
CPU new speed 1793 MHz, 85.1038% idle
CPU new speed 1793 MHz, 94.9939% idle
CPU new speed 1793 MHz, 89.3453% idle
CPU new speed 1494 MHz, 90.5814% idle
CPU new speed 1494 MHz, 94.7301% idle
CPU new speed 1494 MHz, 85.6977% idle
CPU new speed 1195 MHz, 89.4602% idle
CPU new speed 1195 MHz, 85% idle
CPU new speed 1195 MHz, 89.4602% idle
CPU new speed 896 MHz, 90.4651% idle
CPU new speed 896 MHz, 80.0977% idle


Qui ad esempio lo "storico" di un emerge -pv world :)

francofait
05-01-2004, 16:36
Linkato nei tutorial.

Tega
06-01-2004, 01:37
bella Giorgio,

stavo giusto smanettando sulla questione? Hai provato anche cpudynd?

Con speedfreq come setti la modalità di come far lavorare il sistema? Se powersave o altro?

Cmq bel mini howto

:ciauz:

kkriminale
06-01-2004, 15:49
nel patchset mm c'è una patch chiamata laptop mode che aiuta anch'essa a risparmiare batteria. A quanto ho capito scrive in maniera asincrona sul disco quindi resta spento più spesso e viene acceso solo per scrivere più di una cosa alla volta.

GiorgioM
06-01-2004, 17:44
Originariamente inviato da Tega
bella Giorgio,

stavo giusto smanettando sulla questione? Hai provato anche cpudynd?

Con speedfreq come setti la modalità di come far lavorare il sistema? Se powersave o altro?

Cmq bel mini howto

:ciauz:
Ho provato cpudyn ma dopo speedfreq.. e quindi ero già soddisfatto dei risultati :di56:
speedfreq lo setto con la modalità dynamic

GiorgioM
06-01-2004, 17:45
Originariamente inviato da kkriminale
nel patchset mm c'è una patch chiamata laptop mode che aiuta anch'essa a risparmiare batteria. A quanto ho capito scrive in maniera asincrona sul disco quindi resta spento più spesso e viene acceso solo per scrivere più di una cosa alla volta.

Aspetterò che entri a far parte del tree ufficiale :fagiano:

Tega
06-01-2004, 22:48
hai provato a vedere che differenza hai in termini di durata con un kernel della serie 2.4 con patch ed il 2.6? Io fin'ora usavo il 2.4.23 patchato e cpudynd...
Ora vorrei provare speedfreq ma non compila...
Basta dargli il make? Nel readme non ci sono info in merito

Grazie in anticipo

GiorgioM
07-01-2004, 03:17
Sì, scompattato l'archivio basta un make e make install
Paragoni non ne ho con il 2.4 .. qua praticamente ho messo subito il 2.6 (test1 e sucessivi)

Mi sono accorto che sicuramente scalda meno e scusate se è poco :fagiano:

Tega
07-01-2004, 15:53
grazie intanto dell'info,

se lancio il make mi scrive bk, command not found e e poi non compila... che versione di gcc occorre?

Tega
07-01-2004, 21:57
up :D

Loading