Regolare la frequenza della cpu con cpufreqd

Guides, tutorials & docs
Post Reply
User avatar
bat86
Utente junior
Utente junior
Posts: 69
Joined: 22 September 2008, 12:54
OpenMandriva: 2011.0
Kernel: 2.6.38.7
Desktop: KDE 4.6.5
country: ita

Regolare la frequenza della cpu con cpufreqd

Post by bat86 »

Cpufreqd è un demone che si occupa di settare la frequenza della cpu basandosi su vari parametri, lavoro da svolgere, alimentazione, temperatura ecc. Ho trovato cpufreqd molto versatile e con una buona configurabilità. Perchè usare questo gestore? L'ho scelto per simpatia, perchè mi sembra parsimonioso di risorse e perchè ho avuto un sensibile miglioramento nella durata della batteria del portatile.

1- Per prima cosa installiamo cpufreqd e cpufrequtils con rpmdrake o con il comando

Code: Select all

urpmi cpufreqd cpufrequtils
2- Apriamo il centro di controllo Mandriva scegliamo il tab Sistema e clicchiamo su Gestisci i servizi di sist...
fermiamo cpufreqd se è in esecuzione, minimizziamo la finestra perchè poi ci torneremo

3- se non avete aperto la console prima lo fate ora e come root date il comando

Code: Select all

cpufreq-info
a questo punto ci focalizziamo su due righe

a) frequenze disponibili
b) gestori disponibili

3.1- se non doveste trovare più frequenze e più gestori disponibili probabilmente qualcosa non va nella vostra configurazione, più precisamente potrebbe non essere caricato il modulo destinato al controllo della vostra cpu, questo è stato il mio caso dove sul portatile con Celeron 550 non viene caricato il modulo p4_clock. Informatevi su quale modulo serve per il vostro processore e date

#modprobe nomemodulo

ripetete il comando cpufreq-info questa volta dovrebbero esserci più frequenze e più gestori, se è così editate /etc/modprobe.preload aggiungendo una riga con: nomemodulo

4- Lasciamo aperta la console e apriamo un editor di testo come root. Apriamo il file /etc/cpufreqd.conf (consiglio un backuop del originale) che è il file di configurazione di cpufreqd.

Il file è sostanzialmente formato da profili che verranno eseguiti dal demone, i profili sono del tipo
[Profile]
name=On_Demand_Low # nome assegnato al profilo
minfreq=20% # frequenza minima alla quale verrà settata la cpu se non le è richiesto lavoro, in %
maxfreq=80% # frequenza massima a cui verrà portata la cpu a pieno carico, in %
policy=ondemand # gestore frequenza utilizzato, cioè il criterio con il quale si varieranno le frequenze
[/Profile]

(per minfreq e maxfreq vedere frequenze disponibili e usare percentuale su frequenza massima. Es da cpufreq-info ottengo: frequenze disponibili: 375 MHz, 750 MHz, 1.13 GHz, 1.50 GHz, 1.88 GHz, 2.25 GHz, 2.63 GHz, 3.00 GHz
se desidero che 750MHz sia minfreq faccio (750/3000)*100=25 allora sarà: minfreq=25%)

e dalle regole che tengono conto, ad esempio, del tipo di alimentazione: rete, batteria, batteria scarsa o batteria carica, esecuzione di programmi (es guardare un film) o la temperatura con la interessante regola CPU Too Hot (processore troppo caldo).
[Rule]
name=CPU Too Hot #nome regola
acpi_temperature=45-100 #arco temperature
cpu_interval=50-100 #arco utilizzo cpu
profile=On_Demand_Low #nome profilo che verrà usato se si entra nelle due condizioni sopra
[/Rule]

5- editiamo il file, la sezione General deve essere così:

Code: Select all

[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
verbosity=0
enable_remote=1
remote_group=root
[/General]
verbosity, non ho approfondito cosa sia sinceramente e magari si può lasciare al valore originale (4 o 5 mi sembra)

la sezione acpi deve essere:

Code: Select all

[acpi]
acpid_socket=/var/run/acpid.socket
[/acpi]
La sezione per chip nforce2, non l'ho utilizzata. se avete tale chip meglio che prendiate più informazioni da internet.
La sezione sensors_plugin non l'ho usata.

I profili messi nel file iniziale mi sembrano eccessivi, ad ogni modo una configurazione desktop sarà diversa da una per notebook.

5.1- Per una configurazione desktop inserirei un profilo

Code: Select all

[Profile]
name=On_Demand
minfreq=20%
maxfreq=100%
policy=ondemand
[/Profile]
da usare con la regola

Code: Select all

[Rule]
name=AC Rule
ac=on                    # (on/off)
profile=On_Demand
[/Rule]
un profilo

Code: Select all

[Profile]
name=On_Demand_Low
minfreq=20%
maxfreq=80%
policy=ondemand
[/Profile]
da usare con la regola

Code: Select all

[Rule]
name=CPU Too Hot
acpi_temperature=45-100   #ovviamente la temperatura dipende dal processore
cpu_interval=50-100
profile=On_Demand_Low
[/Rule]
se volete usare la regola "Movie Watcher" avrete bisogno del profilo che richiama, o modificandola usando un profilo adeguato. Sulla Falsa riga del profilo "Movie Watcher" si possono creare regole ad hoc per l'esecuzione di alcuni programmi.
Il resto dei profili e regole inutilizzati si possono commentare o cancellare.

5.2- per una configurazione notebook userei i profili "On_Demand" da usare con la regola "AC Rule" come sopra, un profilo "On_Demand_Low" come sopra da usare a batteria cioè con la regola "AC Off - Medium Battery" modificata così

Code: Select all

[Rule]
name=AC Off - Medium Battery
ac=off                   # (on/off)
battery_interval=30-100
#exec_post=echo 5 > /proc/acpi/sony/brightness
profile=On_Demand_Low
[/Rule]
un profilo Poversave fatto così

Code: Select all

[Profile]
name=Powersave
minfreq=10%
maxfreq=50%
policy=powersave
[/Profile]
usato con la regola

Code: Select all

[Rule]
name=AC Off - Low Battery
ac=off                   # (on/off)
battery_interval=0-30
#exec_post=echo 5 > /proc/acpi/sony/brightness
profile=Powersave
[/Rule]
e con la regola

Code: Select all

[Rule]
name=CPU Too Hot
acpi_temperature=45-100
cpu_interval=50-100
profile=Powersave
[/Rule]
6- salviamo cpufreqd.conf, torniamo alla gestione servizi del centro controllo, spuntiamo l'esecuzione al boot e avviamo cpufreqd. Fermiamo gli altri servizi cpu-qualcosa e togliamoli dall'esecuzione al boot. Su mandriva 2008.1 desktop ho eliminato kpowersave, al quale affidavo prima queste cose. per verificare che lo scaling della cpu sia attivo si può dare il comando da root

Code: Select all

watch -n 1 cat /proc/cpuinfo


7- Come notate io sono andato per la via della semplificazione, perchè se è vero che abbassare la frequenza porta ad un risparmio di batteria è anche vero che servirà più tempo per finire un operazione, quindi secondo me ha poco senso limitare la frequenza al 30%. Così come ho scelto spesso il gestore ondemand che ritengo sia una buona scelta anche per i sistemi desktop che non hanno esigenze particolari. Ovviamente un sistema pronto e reattivo al nanosecondo si ottiene con un governatore performance e con minfreq=maxfreq=100%, ed eliminando (o alzando i limiti di temperatura e carico processore) la regola "CPU Too Hot"
Cosa c'è da migliorare in questa guida, principalmente la gestione della luminosità dello schermo, che come vedete è commentata.
Suggerisco di visionare più cpufreqd.conf per avere un'idea migliore.
Image
Image
Image

Post Reply