Modulare il funzionamento di una CPU: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
 
(16 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze|Wheezy|Sid}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
 
== Introduzione ==
== Introduzione ==
 
Ormai da anni esiste la possibilità di regolare il funzionamento della CPU di una macchina per meglio rispondere alle esigenze dell'utente, ma mentre inizialmente era necessario ricorrere a programmi appositi, con le ultime versione del kernel (>= 2.6.12) di Linux questa necessità è venuta meno.<br/>
Ormai da anni esiste la possibilità di regolare il funzionamento della CPU di una macchina per meglio rispondere alle esigenze dell'utente, ma mentre inizialmente era necessario ricorrere a programmi appositi, con le ultime versione del kernel (>= 2.6.12) di linux questa necessità è venuta meno.<br/>
Di più, la modulazione della CPU è divenuta la condizione standard, tanto da essere abilitata automaticamente all'avvio del computer grazie ai moduli cpufreq del kernel, e modificabile dai file system sysfs e procfs del kernel.
Di più, la modulazione della CPU è divenuta la condizione standard, tanto da essere abilitata automaticamente all'avvio del computer grazie all'utilizzo del pacchetto <code>cpufrequtils</code>, di norma già installato durante l'installazione del sistema operativo.<br/>
Si noti che tale pacchetto permette di regolare la frequenza della CPU attraverso entrambe le interfacce CPUFreq, sysfs e procfs, del kernel.
 
== Applet GNOME ==
 
Nel caso di GNOME il metodo più semplice per variare la modalità di funzionamento della CPU è aggiungere al pannello l'applet ''Variazione Frequenza CPU''. Fatto ciò comparirà un icona raffigurante un chip e una barra colorata indicante l'attuale frequenza di funzionamento della CPU come frazione della frequenza massima ammissibile.<br/>
Cliccando col tasto sinistro sulla suddetta icona verrà mostrato sia l'elenco delle frequenze che delle modalità di funzionamento permesse; basta cliccare quindi sul valore desiderato, immettere la password di amministratore quando richiesto, e i suddetti parametri verranno modificati.<br/>
Si noti che:
# ogni applet gestisce un core e di default viene gestito il primo core (cpu0), è quindi necessario aggiungere tante applet quanti sono i propri core e cliccando col tasto destro su ciascuna di esse selezionare un differente core;
# le variazioni sono temporanee e pertanto andranno perse al successivo avvio del sistema. Per introdurre modifiche permanenti si veda l'apposita sezione.


== Terminale ==
== Terminale ==
 
È possibile determinare l'attuale frequenza della CPU in due modi, in primis digitando:
È possibile determinare l'attuale frequenza della CPU in due modi, in primis digitando
<pre>$ cat /proc/cpuinfo</pre>
<pre>cat /proc/cpuinfo</pre>
e leggendo la riga ''CPU MHz'', alternativamente digitando:
e leggendo la riga ''CPU MHz'', alternativamente digitando
<pre>$ cat /sys/devices/system/cpu/*/cpufreq/scaling_cur_freq</pre>
<pre>$ cat /sys/devices/system/cpu/*/cpufreq/scaling_cur_freq</pre>
Per conoscere le frequenze di funzionamento ammissibili (espresse in [kHz])
Per conoscere le frequenze di funzionamento ammissibili (espresse in [kHz]):
<pre>$ cat /sys/devices/system/cpu/*/cpufreq/scaling_available_frequencies </pre>
<pre>$ cat /sys/devices/system/cpu/*/cpufreq/scaling_available_frequencies </pre>
Conoscendo tali valori è possibile impostare coerentemente i valori massimo e minimo con i seguenti comandi
Conoscendo tali valori, è possibile impostare coerentemente i valori massimo e minimo con i seguenti comandi (con [[privilegi di amministrazione]]):
<pre>
<pre>
$ echo valore > /sys/devices/system/cpu/*/cpufreq/scaling_max_freq<br/>
# echo valore > /sys/devices/system/cpu/*/cpufreq/scaling_max_freq
$ echo valore > /sys/devices/system/cpu/*/cpufreq/scaling_min_freq
# echo valore > /sys/devices/system/cpu/*/cpufreq/scaling_min_freq
</pre>
</pre>
Si noti la presenza del carattere "*" nelle due precedenti righe di comando, che implica la selezione di tutti i core della propria CPU. Qualora si desiderasse selezionare uno specifico core è sufficiente sostituire "*" con "cpuX", dove è 0<=X<=(N-1) e N il numero di core della CPU (nel caso di un dual core si avrebbe dunque una "cpu0" ed una "cpu1"). Per impostare ad esempio una frequenza minima di 1,2 GHz del primo core basterebbe digitare:
Si noti la presenza del carattere "*" nelle due precedenti righe di comando, che implica la selezione di tutti i core della propria CPU. Qualora si desiderasse selezionare uno specifico core è sufficiente sostituire "*" con "cpuX", dove è 0<=X<=(N-1) e N il numero di core della CPU (nel caso di un dual core si avrebbe dunque una "cpu0" ed una "cpu1"). Per impostare ad esempio una frequenza minima di 1,2 GHz del primo core basterebbe digitare:
<pre>$ echo 1200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq</pre>
<pre># echo 1200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq</pre>
visto che come già scritto le frequenze devono essere specificate in [kHz]. Impostare manualmente il massimo e il minimo ha senso solo se:
visto che come già scritto le frequenze devono essere specificate in [kHz]. Impostare manualmente il massimo e il minimo ha senso solo se:
# la modalità di funzionamento scelta (si veda più avanti) permette di variare la frequenza di funzionamento;
# la modalità di funzionamento scelta (si veda più avanti) permette di variare la frequenza di funzionamento;
# la propria CPU supporta almeno tre distinte frequenze di funzionamento, cosa non sempre vera nel caso di processori desktop. A titolo d'esempio le CPU Intel Core Duo 2 e Celeron D supportano in genere solo due differenti frequenze, le CPU Athlon X2 tre e la CPU sempron 145 quattro. Le CPU per portatili invece supportano in genere almeno quattro distinte frequenze.<br/>
# la propria CPU supporta almeno tre distinte frequenze di funzionamento, cosa non sempre vera nel caso di processori desktop. A titolo d'esempio le CPU Intel Core Duo 2 e Celeron D supportano in genere solo due differenti frequenze, le CPU Athlon X2 tre e la CPU Sempron 145 quattro. Le CPU per portatili invece supportano in genere almeno quattro distinte frequenze.<br/>
Per visualizzare l'elenco delle modalità disponibili digitare
Per visualizzare l'elenco delle modalità disponibili digitare:
<pre>cat /sys/devices/system/cpu/*/cpufreq/scaling_available_governors</pre>
<pre>$ cat /sys/devices/system/cpu/*/cpufreq/scaling_available_governors</pre>
che restituirà un output del tipo
che restituirà un output del tipo:
<pre>conservative userspace powersave ondemand performance</pre>
<pre>conservative userspace powersave ondemand performance</pre>
Per determinare quello attualmente in uso:
Per determinare quello attualmente in uso:
<pre>cat /sys/devices/system/cpu/*/cpufreq/scaling_governor</pre>
<pre>$ cat /sys/devices/system/cpu/*/cpufreq/scaling_governor</pre>
Per impostare ad esempio la modalità ''conservative'' in tutti i core:
Per impostare ad esempio la modalità ''conservative'' in tutti i core:
<pre>echo conservative > /sys/devices/system/cpu/*/cpufreq/scaling_governor</pre>
<pre># echo conservative > /sys/devices/system/cpu/*/cpufreq/scaling_governor</pre>
Qualora il precedente comando dovesse restituire un avviso di "ambiguous redirect" sostituire al carattere "*" uno alla vota il core desiderato (cpu0, cpu1, ecc.).<br/>
'''NOTA BENE''': la sintassi dei comandi per visualizzare e modificare i valori dei vari parametri elencati nel seguito è sempre la stessa, ovvero:
'''NOTA BENE''': la sintassi dei comandi per visualizzare e modificare i valori dei vari parametri elencati nel seguito è sempre la stessa, ovvero:
<pre>$ cat percorso_parametro/parametro</pre>
<pre>$ cat percorso_parametro/parametro</pre>
per visualizzare l'attuale valore dello stesso, mentre per modificarne il valore:
per visualizzare l'attuale valore dello stesso, mentre per modificarne il valore:
<pre># echo valore > percorso_parametro/parametro</pre>
<pre># echo valore > percorso_parametro/parametro</pre>
Si osservi che le modifiche effettuate restano valide solo fino al successivo riavvio del sistema (vedere l'apposita sezione per come rendere permanenti le modifiche).<br/>
Si osservi che le modifiche effettuate restano valide solo fino al successivo riavvio del sistema (vedere l'apposita sezione per come rendere permanenti le modifiche).


Tralasciando ''userspace'' si descrivono qui di seguito le altre modalità:
Tralasciando ''userspace'' si descrivono qui di seguito le altre modalità:
Riga 55: Riga 44:
**''<code>up_threshold</code>'', il valor medio della percentuale di carico CPU tra due consecutivi istanti di campionamento perché il kernel decida di incrementare la frequenza della CPU. Esempio: se tale valore fosse impostato ad esempio su 80 (che significa 80%) il kernel opterebbe per un incremento di frequenza se all'istante X misurasse un carico del 70% e all'istante X+1 un carico del 90%, oppure 75% all'istante X e 88% in X+1, ecc.
**''<code>up_threshold</code>'', il valor medio della percentuale di carico CPU tra due consecutivi istanti di campionamento perché il kernel decida di incrementare la frequenza della CPU. Esempio: se tale valore fosse impostato ad esempio su 80 (che significa 80%) il kernel opterebbe per un incremento di frequenza se all'istante X misurasse un carico del 70% e all'istante X+1 un carico del 90%, oppure 75% all'istante X e 88% in X+1, ecc.
**''<code>down_threshold</code>'', come al punto precedente, ma in questo caso si imposta il valor medio per cui la frequenza deve essere ridotta rispetto all'attuale valore;
**''<code>down_threshold</code>'', come al punto precedente, ma in questo caso si imposta il valor medio per cui la frequenza deve essere ridotta rispetto all'attuale valore;
**''<code>freq_step</code>'', l'incremento/decremento percentuale adottato dal kernel nelle condizioni descritte sopra; posto di chiamare tale valore 'K' dovrà essere 0<K<100 con K intero (di fatto imopstare un valore nullo equivale a impedire ogni incremento di frequenza). Esempio: impostando un valore di <code>freq_step</code> pari a 5 la frequenza della CPU sarà aumentata del 5% ogni volta che il valor medio percentuale del carico è superiore a quello definito <code>up_treshold</code>; supponendo quindi di partire da un valore di 72 la frequenza sarà portata (sempre in percentuale) prima a 77, poi a 82, poi a 87, ecc. Risulta quindi molto importante la definizione del valore di <code>sampling_rate</code>, se infatti questo è impostato su un valore dell'ordine dei millisecondi è evidente che la frequenza della CPU incrementerà per ogni minima sciocchezza annullando del tutto o parzialmente i benefici della modalità in oggetto, ovvero una riduzione dei consumi energetici (il valore predefinito in questa modalità è 0,6 s, almeno nel caso di chi scrive);
**''<code>freq_step</code>'', l'incremento/decremento percentuale adottato dal kernel nelle condizioni descritte sopra; posto di chiamare tale valore 'K' dovrà essere 0<K<100 con K intero (di fatto impostare un valore nullo equivale a impedire ogni incremento di frequenza). Esempio: impostando un valore di <code>freq_step</code> pari a 5 la frequenza della CPU sarà aumentata del 5% ogni volta che il valor medio percentuale del carico è superiore a quello definito <code>up_treshold</code>; supponendo quindi di partire da un valore di 72 la frequenza sarà portata (sempre in percentuale) prima a 77, poi a 82, poi a 87, ecc. Risulta quindi molto importante la definizione del valore di <code>sampling_rate</code>, se infatti questo è impostato su un valore dell'ordine dei millisecondi è evidente che la frequenza della CPU incrementerà per ogni minima sciocchezza annullando del tutto o parzialmente i benefici della modalità in oggetto, ovvero una riduzione dei consumi energetici (il valore predefinito in questa modalità è 0,6 s, almeno nel caso di chi scrive);
**''<code>ignore_nice_load</code>'', può assumere solo due valori, cioè 0 (disattivato) e 1 (attivato). Qualora attivato questo parametro esclude dal computo dell'attuale carico della CPU tutti quei processi classificati come ''nice'' (ignoro tuttavia come ciò possa essere fatto). Questo parametro potrebbe risultare interessante per esempio nel caso di quelle computazioni numerico di cui risulta poco importante il tempo di completamento, dove magari non cambia nulla se invece di 20 minuti l'operazione impiega un'ora a terminare.
**''<code>ignore_nice_load</code>'', può assumere solo due valori, cioè 0 (disattivato) e 1 (attivato). Qualora attivato questo parametro esclude dal computo dell'attuale carico della CPU tutti quei processi classificati come ''nice'' (ignoro tuttavia come ciò possa essere fatto). Questo parametro potrebbe risultare interessante per esempio nel caso di quelle computazioni numerico di cui risulta poco importante il tempo di completamento, dove magari non cambia nulla se invece di 20 minuti l'operazione impiega un'ora a terminare.
*'''Ondemand''': è la modalità di funzionamento predefinita ed è molto simile alla precedente, ma invece di privilegiare il risparmio energetico migliora le prestazioni. La differenza fondamentale è costituita dall'incremento di frequenza, che in questo caso non può essere regolata ed è pari al 100%, ovvero non appena si raggiunge il carico medio definito in <code>up_threshold</code> la frequenza della CPU schizza al valore massimo. Dopo un certo intervallo di tempo in cui la percentuale di carico scende sotto il valore di riferimento la frequenza di funzionamento viene immediatamente riportata al valore minimo. Il percorso della modalità è '''<code>/sys/devices/system/cpu/*/cpufreq/ondemand/</code>''', mentre i parametri configurabili sono (si omette ogni spiegazione degli stessi poiché identica a quella fornita al punto precedente):
*'''Ondemand''': è la modalità di funzionamento predefinita ed è molto simile alla precedente, ma invece di privilegiare il risparmio energetico migliora le prestazioni. La differenza fondamentale è costituita dall'incremento di frequenza, che in questo caso non può essere regolata ed è pari al 100%, ovvero non appena si raggiunge il carico medio definito in <code>up_threshold</code> la frequenza della CPU schizza al valore massimo. Dopo un certo intervallo di tempo in cui la percentuale di carico scende sotto il valore di riferimento la frequenza di funzionamento viene immediatamente riportata al valore minimo. Il percorso della modalità è '''<code>/sys/devices/system/cpu/*/cpufreq/ondemand/</code>''', mentre i parametri configurabili sono (si omette ogni spiegazione degli stessi poiché identica a quella fornita al punto precedente):
Riga 64: Riga 53:
**''<code>up_threshold</code>'';
**''<code>up_threshold</code>'';
**''<code>ignore_nice_load</code>''.
**''<code>ignore_nice_load</code>''.
*'''Performance''': con questa modalità la CPU funziona sempre alla frequenza massima, a prescindere dal carico reale della stessa, quindi oltre a consumi elettrici maggiori si ha anche un maggior riscaldamento della CPU stessa. Prima di selezionare questa modalità si ricordi che con la modalità ''ondemand'' la frequenza non decresce dal valore massimo istantanemente, pertanto se il livello di carico rimane costante, o oscilla tra i valori massimo e minimo rapidamente, le prestazioni offerte dalla presente modalità risultano del tutto equivalenti a quelle fornite da ''ondemand''. Probabilmente tale modalità risulta utile in quelle situazioni dove il carico di lavoro oscilla frequentemente, ma non troppo rapidamente, tra valori molto alti e valori molto bassi, con la conseguenza di avere numerose variazioni di frequenza della CPU.
*'''Performance''': con questa modalità la CPU funziona sempre alla frequenza massima, a prescindere dal carico reale della stessa, quindi oltre a consumi elettrici maggiori si ha anche un maggior riscaldamento della CPU stessa. Prima di selezionare questa modalità si ricordi che con la modalità ''ondemand'' la frequenza non decresce dal valore massimo istantaneamente, pertanto se il livello di carico rimane costante, o oscilla tra i valori massimo e minimo rapidamente, le prestazioni offerte dalla presente modalità risultano del tutto equivalenti a quelle fornite da ''ondemand''. Probabilmente tale modalità risulta utile in quelle situazioni dove il carico di lavoro oscilla frequentemente, ma non troppo rapidamente, tra valori molto alti e valori molto bassi, con la conseguenza di avere un numero elevato di variazioni di frequenza della CPU nel caso di utilizzo della modalità ''Ondemand''.
*'''Powersave''': è il caso speculare al precedente dove, cascasse il mondo, la frequenza della CPU viene mantenuta sempre al valore minimo; trattasi evidentemente della modalità che comporta il minor consumo energetico possibile, ma contestualmente anche le peggiori prestazioni. Questa modalità ha senso di essere usata solo in quelle condizioni dove il risparmio energetico è critico e dove il carico di lavoro della CPU non è mediamente basso, poiché in tali situazioni la differenza con le modalità ''Conservative'' e ''Ondemand'' sarebbe minima.
*'''Powersave''': è il caso speculare al precedente dove, cascasse il mondo, la frequenza della CPU viene mantenuta sempre al valore minimo; trattasi evidentemente della modalità che comporta il minor consumo energetico possibile, ma contestualmente anche le peggiori prestazioni. Questa modalità ha senso di essere usata solo in quelle condizioni dove il risparmio energetico è critico e dove il carico di lavoro della CPU non è mediamente basso, poiché in tali situazioni la differenza con le modalità ''Conservative'' e ''Ondemand'' sarebbe minima.


== Rendere permanenti le modifiche ==
== Rendere permanenti le modifiche ==
È sufficiente installare il pacchetto <code>cpufrequtils</code>. Creerà lo script d'avvio <code>/etc/init.d/cpufrequtils</code>, e renderà disponbibili anche i comandi <code>cpufreq-info</code> e <code>cpufreq-set</code>, senza più bisogno di leggere i valori dai filesystem in <code>/proc</code> and <code>/sys</code>.
Se ci si limita a cambiare la modalità di funzionamento, per esempio da ''Ondemand'' a ''Conservative'' nel caso dei portatili, è sufficiente creare o modificare il file <code>/etc/default/cpufrequtils</code>, per esempio con [[nano]]:
<pre># nano /etc/default/cpufrequtils</pre>
e scrivere (o cambiarla, se già presente) la riga <code>GOVERNOR="conservative"</code>. È anche possibile cambiare i valori delle frequenze massima e minima, purché permesso dalla modalità scelta, attraverso le variabili <code>MAX_SPEED</code> e <code>MIN_SPEED</code>.


Se ci si limita a cambiare la modalità di funzionamento, per esempio da ''Ondemand'' a ''Conservative'' nel caso dei portatili, è sufficiente editare il file <code>/etc/init.d/cpufrequtils</code>
<pre>nano /etc/init.d/cpufrequtils</pre>
e cercare la variabile <code>GOVERNOR="ondemand"</code> cambiandola in <code>GOVERNOR="conservative"</code>. È anche possibile cambiare i valori delle frequenze massima e minima, purché permesso dalla modalità scelta, attraverso le variabili <code>MAX_SPEED=</code> e <code>MIN_SPEED=</code>.<br/>
Qualora si intendesse modificare altri parametri sarebbe necessario ricorrere ad altre strade, come ad esempio editare il file <code>/etc/rc.local</code> o installare le <code>sysfsutils</code>.
Qualora si intendesse modificare altri parametri sarebbe necessario ricorrere ad altre strade, come ad esempio editare il file <code>/etc/rc.local</code> o installare le <code>sysfsutils</code>.


== Regolazione dinamica ==
È possibile modificare il livello in modo dinamico installando il pacchetto <code>cpufreqd</code>, in base al verificarsi di diverse condizioni, anziché avere sempre la stessa modalità, modificabile solo manualmente. Per maggiori informazioni si rimanda a [[Cpufreqd:_Un_demone_per_il_CPU_frequency_scaling|questa guida]].
== Approfondimenti ==
<code>$ man cpufreq-info</code><br/>
<code>$ man cpufreq-set</code>
=== Sitografia ===
[http://www.pantz.org/software/cpufreq/usingcpufreqonlinux.html CPUFreq on Linux]


--[[Utente:Wtf|Wtf]] 15:18, 24 ago 2011 (CEST)
{{Autori
|Autore = [[Utente:Wtf|Wtf]] 15:18, 24 ago 2011 (CEST)
|Estesa_da =
|Verificata_da =
:[[Utente:HAL 9000|HAL 9000]] 09:30, 28 lug 2019 (CEST)
|Numero_revisori = 1
}}


[[Categoria:Ottimizzazione del sistema]]
[[Categoria:Ottimizzazione del sistema]]
[[Categoria:Computer portatili]]
[[Categoria:Computer portatili]]

Versione attuale delle 07:32, 28 lug 2019

Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"

Introduzione

Ormai da anni esiste la possibilità di regolare il funzionamento della CPU di una macchina per meglio rispondere alle esigenze dell'utente, ma mentre inizialmente era necessario ricorrere a programmi appositi, con le ultime versione del kernel (>= 2.6.12) di Linux questa necessità è venuta meno.
Di più, la modulazione della CPU è divenuta la condizione standard, tanto da essere abilitata automaticamente all'avvio del computer grazie ai moduli cpufreq del kernel, e modificabile dai file system sysfs e procfs del kernel.

Terminale

È possibile determinare l'attuale frequenza della CPU in due modi, in primis digitando:

$ cat /proc/cpuinfo

e leggendo la riga CPU MHz, alternativamente digitando:

$ cat /sys/devices/system/cpu/*/cpufreq/scaling_cur_freq

Per conoscere le frequenze di funzionamento ammissibili (espresse in [kHz]):

$ cat /sys/devices/system/cpu/*/cpufreq/scaling_available_frequencies 

Conoscendo tali valori, è possibile impostare coerentemente i valori massimo e minimo con i seguenti comandi (con privilegi di amministrazione):

# echo valore > /sys/devices/system/cpu/*/cpufreq/scaling_max_freq
# echo valore > /sys/devices/system/cpu/*/cpufreq/scaling_min_freq

Si noti la presenza del carattere "*" nelle due precedenti righe di comando, che implica la selezione di tutti i core della propria CPU. Qualora si desiderasse selezionare uno specifico core è sufficiente sostituire "*" con "cpuX", dove è 0<=X<=(N-1) e N il numero di core della CPU (nel caso di un dual core si avrebbe dunque una "cpu0" ed una "cpu1"). Per impostare ad esempio una frequenza minima di 1,2 GHz del primo core basterebbe digitare:

# echo 1200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq

visto che come già scritto le frequenze devono essere specificate in [kHz]. Impostare manualmente il massimo e il minimo ha senso solo se:

  1. la modalità di funzionamento scelta (si veda più avanti) permette di variare la frequenza di funzionamento;
  2. la propria CPU supporta almeno tre distinte frequenze di funzionamento, cosa non sempre vera nel caso di processori desktop. A titolo d'esempio le CPU Intel Core Duo 2 e Celeron D supportano in genere solo due differenti frequenze, le CPU Athlon X2 tre e la CPU Sempron 145 quattro. Le CPU per portatili invece supportano in genere almeno quattro distinte frequenze.

Per visualizzare l'elenco delle modalità disponibili digitare:

$ cat /sys/devices/system/cpu/*/cpufreq/scaling_available_governors

che restituirà un output del tipo:

conservative userspace powersave ondemand performance

Per determinare quello attualmente in uso:

$ cat /sys/devices/system/cpu/*/cpufreq/scaling_governor

Per impostare ad esempio la modalità conservative in tutti i core:

# echo conservative > /sys/devices/system/cpu/*/cpufreq/scaling_governor

Qualora il precedente comando dovesse restituire un avviso di "ambiguous redirect" sostituire al carattere "*" uno alla vota il core desiderato (cpu0, cpu1, ecc.).
NOTA BENE: la sintassi dei comandi per visualizzare e modificare i valori dei vari parametri elencati nel seguito è sempre la stessa, ovvero:

$ cat percorso_parametro/parametro

per visualizzare l'attuale valore dello stesso, mentre per modificarne il valore:

# echo valore > percorso_parametro/parametro

Si osservi che le modifiche effettuate restano valide solo fino al successivo riavvio del sistema (vedere l'apposita sezione per come rendere permanenti le modifiche).

Tralasciando userspace si descrivono qui di seguito le altre modalità:

  • Conservative: questa modalità prevede un funzionamento normale con frequenza pari alla frequenza minima ammissibile, mentre quando si verifica un incremento del carico di lavoro richiesto la frequenza viene aumentata gradualmente fino al valore massimo. Per questi motivi la presente modalità risulta idonea per quei computer alimentati da una batteria, come i portatili. Il percorso della modalità è /sys/devices/system/cpu/*/cpufreq/conservative/, mentre i parametri configurabili sono:
    • scaling_max_freq e scaling_min_freq, già descritti.
    • sampling_rate, l'attuale frequenza di campionamento del carico della CPU in microsecondi [10^(-6)*s];
      • sampling_rate_min, minima frequenza di campionamento ammissibile del carico della CPU in microsecondi;
      • sampling_rate_max, minima frequenza di campionamento ammissibile del carico della CPU in microsecondi;
    • up_threshold, il valor medio della percentuale di carico CPU tra due consecutivi istanti di campionamento perché il kernel decida di incrementare la frequenza della CPU. Esempio: se tale valore fosse impostato ad esempio su 80 (che significa 80%) il kernel opterebbe per un incremento di frequenza se all'istante X misurasse un carico del 70% e all'istante X+1 un carico del 90%, oppure 75% all'istante X e 88% in X+1, ecc.
    • down_threshold, come al punto precedente, ma in questo caso si imposta il valor medio per cui la frequenza deve essere ridotta rispetto all'attuale valore;
    • freq_step, l'incremento/decremento percentuale adottato dal kernel nelle condizioni descritte sopra; posto di chiamare tale valore 'K' dovrà essere 0<K<100 con K intero (di fatto impostare un valore nullo equivale a impedire ogni incremento di frequenza). Esempio: impostando un valore di freq_step pari a 5 la frequenza della CPU sarà aumentata del 5% ogni volta che il valor medio percentuale del carico è superiore a quello definito up_treshold; supponendo quindi di partire da un valore di 72 la frequenza sarà portata (sempre in percentuale) prima a 77, poi a 82, poi a 87, ecc. Risulta quindi molto importante la definizione del valore di sampling_rate, se infatti questo è impostato su un valore dell'ordine dei millisecondi è evidente che la frequenza della CPU incrementerà per ogni minima sciocchezza annullando del tutto o parzialmente i benefici della modalità in oggetto, ovvero una riduzione dei consumi energetici (il valore predefinito in questa modalità è 0,6 s, almeno nel caso di chi scrive);
    • ignore_nice_load, può assumere solo due valori, cioè 0 (disattivato) e 1 (attivato). Qualora attivato questo parametro esclude dal computo dell'attuale carico della CPU tutti quei processi classificati come nice (ignoro tuttavia come ciò possa essere fatto). Questo parametro potrebbe risultare interessante per esempio nel caso di quelle computazioni numerico di cui risulta poco importante il tempo di completamento, dove magari non cambia nulla se invece di 20 minuti l'operazione impiega un'ora a terminare.
  • Ondemand: è la modalità di funzionamento predefinita ed è molto simile alla precedente, ma invece di privilegiare il risparmio energetico migliora le prestazioni. La differenza fondamentale è costituita dall'incremento di frequenza, che in questo caso non può essere regolata ed è pari al 100%, ovvero non appena si raggiunge il carico medio definito in up_threshold la frequenza della CPU schizza al valore massimo. Dopo un certo intervallo di tempo in cui la percentuale di carico scende sotto il valore di riferimento la frequenza di funzionamento viene immediatamente riportata al valore minimo. Il percorso della modalità è /sys/devices/system/cpu/*/cpufreq/ondemand/, mentre i parametri configurabili sono (si omette ogni spiegazione degli stessi poiché identica a quella fornita al punto precedente):
    • scaling_max_freq e scaling_min_freq;
    • sampling_rate;.
      • sampling_rate_min;
      • sampling_rate_max;.
    • up_threshold;
    • ignore_nice_load.
  • Performance: con questa modalità la CPU funziona sempre alla frequenza massima, a prescindere dal carico reale della stessa, quindi oltre a consumi elettrici maggiori si ha anche un maggior riscaldamento della CPU stessa. Prima di selezionare questa modalità si ricordi che con la modalità ondemand la frequenza non decresce dal valore massimo istantaneamente, pertanto se il livello di carico rimane costante, o oscilla tra i valori massimo e minimo rapidamente, le prestazioni offerte dalla presente modalità risultano del tutto equivalenti a quelle fornite da ondemand. Probabilmente tale modalità risulta utile in quelle situazioni dove il carico di lavoro oscilla frequentemente, ma non troppo rapidamente, tra valori molto alti e valori molto bassi, con la conseguenza di avere un numero elevato di variazioni di frequenza della CPU nel caso di utilizzo della modalità Ondemand.
  • Powersave: è il caso speculare al precedente dove, cascasse il mondo, la frequenza della CPU viene mantenuta sempre al valore minimo; trattasi evidentemente della modalità che comporta il minor consumo energetico possibile, ma contestualmente anche le peggiori prestazioni. Questa modalità ha senso di essere usata solo in quelle condizioni dove il risparmio energetico è critico e dove il carico di lavoro della CPU non è mediamente basso, poiché in tali situazioni la differenza con le modalità Conservative e Ondemand sarebbe minima.

Rendere permanenti le modifiche

È sufficiente installare il pacchetto cpufrequtils. Creerà lo script d'avvio /etc/init.d/cpufrequtils, e renderà disponbibili anche i comandi cpufreq-info e cpufreq-set, senza più bisogno di leggere i valori dai filesystem in /proc and /sys.

Se ci si limita a cambiare la modalità di funzionamento, per esempio da Ondemand a Conservative nel caso dei portatili, è sufficiente creare o modificare il file /etc/default/cpufrequtils, per esempio con nano:

# nano /etc/default/cpufrequtils

e scrivere (o cambiarla, se già presente) la riga GOVERNOR="conservative". È anche possibile cambiare i valori delle frequenze massima e minima, purché permesso dalla modalità scelta, attraverso le variabili MAX_SPEED e MIN_SPEED.

Qualora si intendesse modificare altri parametri sarebbe necessario ricorrere ad altre strade, come ad esempio editare il file /etc/rc.local o installare le sysfsutils.

Regolazione dinamica

È possibile modificare il livello in modo dinamico installando il pacchetto cpufreqd, in base al verificarsi di diverse condizioni, anziché avere sempre la stessa modalità, modificabile solo manualmente. Per maggiori informazioni si rimanda a questa guida.

Approfondimenti

$ man cpufreq-info
$ man cpufreq-set

Sitografia

CPUFreq on Linux




Guida scritta da: Wtf 15:18, 24 ago 2011 (CEST) Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:
HAL 9000 09:30, 28 lug 2019 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized