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.
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
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
# 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