Alexjan Carraturo

Alexjan Carraturo personal page

p4-clockmod, inutile se non addirittura dannoso

with one comment

Chiunque abbia posseduto un pentium4 sa bene quanto possa consumare a livello di “energia” elettrica, in particolare se montato all’interno di un notebook. A questo proposito, gli utenti di sistemi GNU/Linux si sono sempre avvalsi di moduli di scaling. Generalmente per i processori intel pentium4 si è sempre utilizzato il modulo “p4-clockmod”, mentre per gli altri processori più recenti, il modulo “acpi-cpufreq”. Anche alcuni p4 utilizzavano acpi-cpufreq al posto del p4-clockmod, ma non mi sono mai saputo spiegare la ragione di tale differenza.

Con il mio vecchio pentium4 ho sempre utilizzato p4-clockmod, convinto che esso realmente cambiasse la frequenza della CPU, fino ad oggi che, dopo un periodo di lunga inattività, e dopo una installazione riuscita di Fedora 13, ho provato a riattivare la combinazione “scaling + governor ondemand”. Una prima delusione l’ho ottenuta scoprendo che dal 2.6.30 (attualmente in uso 2.6.33), richiamando il governor ondemand si ottiene questo messaggio

ondemand governor failed, too long transition latency of HW, fallback to performance governor

Cercando attentamente nella rete, mi sono imbattuto in questo post su LKML (la maling list non ufficiale, ma molto completa sul kernel linux).

Scopro, con non poca sorpresa, che il modulo da me utilizzato per anni, realmente non abbassa la frequenza del processore, ma semplicemente forza il processore a fare dei cicli di idle. Questo tipo di approccio, con “carichi di lavoro” pesanti, non solo non fa risparmiare energia, ma ne fa consumare anche di più.

Inoltre, leggendo altrove, scopro che comunque, con modifica al sorgente del modulo e conseguente ricompilazione (cosa da cui questa volta mi esimerò), è possibile riattivare il modulo on-demand, e quindi, far tornare all’opera il funzionamento fittizio del modulo p4-clockmod. Infatti, il suo non funzionamento è un fatto prettamente voluto ed impostato a livello di sorgente.

Segue la patch per il kernel

— a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
+++ b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c
@@ -246,7 +246,10 @@ static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy)
cpufreq_frequency_table_get_attr(p4clockmod_table, policy->cpu);

/* cpuinfo and default policy values */
–       policy->cpuinfo.transition_latency = 1000000; /* assumed */
+
+       /* the transition latency is set to be 1 higher than the maximum
+        * transition latency of the ondemand governor */
+       policy->cpuinfo.transition_latency = 10000001;
policy->cur = stock_freq;

return cpufreq_frequency_table_cpuinfo(policy, &p4clockmod_table[0]);

Tratta da: http://forum.sabayon.org/viewtopic.php?f=56&t=20313.

Written by axjslack

maggio 29, 2010 a 10:36 am

Pubblicato su GNU/Linux, OS

Tagged with , , , , ,

Una Risposta

Subscribe to comments with RSS.

  1. Fammi capire bene? inserisce noop a caso? geniale!😄

    Alessandro Lorenzi

    maggio 29, 2010 at 12:39 pm


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: