Pagina 1 di 1

Compilazione Kernel - CPU Frequency Scaling

Inviato: mer 18 ott 2006, 17:04
da scartozzo
Ho un notebook e al fine di ottimizzare l'uso della batteria vorrei impostare i parametri del kernel in modo appropriato.

In "Default CPUFreq governor mi da due possibilità:
1) performance
2) userspace

e nelle righe successive inserisce
'performance' governor
'powersave' governor
'userspace' governor for userspace frequency scaling
'ondemand' cpu policy governor
'conservative' cpufreq governor

IGNORO:
1) la relazione tra "Default CPUFreq ..." e le scelte delle righe successive.
2) Vorrei attivare il powersave o il conservative (mi pare d'aver capito che sono la scelta migliore per il portatile)
3) Come faccio in ogni caso a regolare successivemente la frequenza della CPU (ammesso che sia necessario)?

Inviato: mer 18 ott 2006, 17:16
da prometeo79
Default indica lo stato della cpu di...default, cioè se la mia cpu ha due frequenze di scaling, settando la modalità userspace come default, all'avvio del pc la mia cpu girerà alla frequenza più bassa, con performance alla frequenza più alta.
Gli altri governor puoi metterli pure tutti se ti va:

'performance' vedi sopra
'powersave' tiene la cpu sempre a regimi minimi
'ondemand' e 'conservetive' gestiscono la cpu in base alle esigenze del momento.

Puoi cambiare lo stato nella dir /sys/devices/system/cpu/cpu0/cpufreq/ o da kde con la comoda utility presente

Inviato: gio 19 ott 2006, 18:40
da castcarlitos
No, default indica il governor della cpu che viene utilizzato di... default. Ovviamente, quando il sistema parte, la cpu deve avere un governor... quella voce indica quello di defautl, che può essere cambiato ad avviamento avvenuto...
cioè se la mia cpu ha due frequenze di scaling,
Gli stati di frequenza attraverso i quali una cpu può passare sono molti più di due... Normalmente sono ben otto...
'performance' vedi sopra
'powersave' tiene la cpu sempre a regimi minimi
'ondemand' e 'conservetive' gestiscono la cpu in base alle esigenze del momento.
Performance = max frequenza CPU possibile sempre dovunque e comunque :)
Powersave = minima frequenza CPU possibile sempre dovunque e comunque :)
Userspace = la frequenza CPU può essere modificata a piacere in user-space, con appositi software o scrivendo in un file in /sys/... (ora non ricordo);
Ondemand = "su richiesta" la frequenza si modifica in funzione delle richieste..
Conservetive = cerca di mantenere la frequenza della CPU il più in basso possibile, compatibilmente con il lavoro da svolgere...

Io sul mio laptop uso come default performance se alimentato, ondemand a betterie fino al 20% di carica residua e poi passa a powersave e dopo si spegne :) Guarda ad esempio l'applet di kde che ti viene mostrata nel pannello riguardante lo stato delle batterie/alimentazione, li puoi impostare i tuoi valori, tra cui il governor :P

Ho un P4 3200MHz che ha 8 throttling states, uno ogni 400MHz; percui il min è proprio 400MHz... Quando gira così i lavori che puoi fare sono veramente pochi....

Bye :)

Inviato: ven 20 ott 2006, 17:41
da prometeo79
castcarlitos ha scritto:No, default indica il governor della cpu che viene utilizzato di... default. Ovviamente, quando il sistema parte, la cpu deve avere un governor... quella voce indica quello di defautl, che può essere cambiato ad avviamento avvenuto...
Mi sono espresso male, ma volevo dire questo
castcarlitos ha scritto:
cioè se la mia cpu ha due frequenze di scaling,
Gli stati di frequenza attraverso i quali una cpu può passare sono molti più di due... Normalmente sono ben otto...
Con slamd64 e un turion la mia cpu lavora solo a due frequenze
castcarlitos ha scritto:Userspace = la frequenza CPU può essere modificata a piacere in user-space, con appositi software o scrivendo in un file in /sys/... (ora non ricordo);
Mi potresti spiegare un pò meglio questa cosa? Mi servirebbe molto poter scalare verso il basso la mia cpu. Grazie

Inviato: mer 25 ott 2006, 0:42
da castcarlitos
Con slamd64 e un turion la mia cpu lavora solo a due frequenze
Io Slamd l'ho instalata solo un paio di volte e ho avuto sempre un po' di problemi... Comunque la distro non influisce, è ilkernel che gestisce ovviamente il frequency scaling...

Prova a guardare qui:

Codice: Seleziona tutto

/sys/devices/system/cpu/cpu0/cpufreq/    
(se hai 2 cpu (tipo HT o dual-core) quella di riferimento è la 0)

I files che trovi sono ben descritti dal nome... Comunque per controllare quanti stati di scaling possiede la tua cpu guarda:

Codice: Seleziona tutto

scaling_available_frequencies
invece per sapere i governor che hai:

Codice: Seleziona tutto

scaling_available_governors
Per modivicare il governor in uso puoi utilizzare una semplicissima istruzione:

Codice: Seleziona tutto

#echo "NOME_GOVERNOR" > scaling_governor
se impostato su User-space allora puoi eseguire:

Codice: Seleziona tutto

#echo "FREQUENZA_VOLUTA" > scaling_setspeed
Dove "FREQUENZA_VOLUTA" deve essere una frequenza listata nel file: scaling_available_frequencies

ad esempio:

Codice: Seleziona tutto

#echo 2800000 > scaling_setspeed
Come software da utilizzare in userspace, invece di compiere queste operazioni a mano, non ne conosco molti, ho utilizzato qualche volta gkrellm2 con l'apposito plug-in per il frequency scaling...

Spero di essere stato chiaro :)

Bye :D

Inviato: mer 25 ott 2006, 9:41
da prometeo79
castcarlitos ha scritto:
Con slamd64 e un turion la mia cpu lavora solo a due frequenze
Io Slamd l'ho instalata solo un paio di volte e ho avuto sempre un po' di problemi... Comunque la distro non influisce, è ilkernel che gestisce ovviamente il frequency scaling...

Prova a guardare qui:

Codice: Seleziona tutto

/sys/devices/system/cpu/cpu0/cpufreq/    
(se hai 2 cpu (tipo HT o dual-core) quella di riferimento è la 0)

I files che trovi sono ben descritti dal nome... Comunque per controllare quanti stati di scaling possiede la tua cpu guarda:

Codice: Seleziona tutto

scaling_available_frequencies
invece per sapere i governor che hai:

Codice: Seleziona tutto

scaling_available_governors
Per modivicare il governor in uso puoi utilizzare una semplicissima istruzione:

Codice: Seleziona tutto

#echo "NOME_GOVERNOR" > scaling_governor
se impostato su User-space allora puoi eseguire:

Codice: Seleziona tutto

#echo "FREQUENZA_VOLUTA" > scaling_setspeed
Dove "FREQUENZA_VOLUTA" deve essere una frequenza listata nel file: scaling_available_frequencies

ad esempio:

Codice: Seleziona tutto

#echo 2800000 > scaling_setspeed
Come software da utilizzare in userspace, invece di compiere queste operazioni a mano, non ne conosco molti, ho utilizzato qualche volta gkrellm2 con l'apposito plug-in per il frequency scaling...

Spero di essere stato chiaro :)

Bye :D
Ok. Questa roba ormai la conosco a memoria, il problema è che lo scaling_setspeed non prende valori inferiori a 800000, probabilmente perchè sto utilizzando le specifiche per athlon64, peccato non ci siano per il turion

Inviato: mer 25 ott 2006, 12:09
da airex
i vari lvielli di ferquenza (e relativi voltaggi) permessi sono cablati nel kernel /usr/src/linux/arch/tua_arch/kernel/cpu/cpufreq/file_tuo_tipo_scaling

io sul mio centrino ho messo mano al file speedstep-centrino.c andando a variare le tensioni operative ma si puo' anche modificare il numero/valore dei diversi livelli energetici; per funzionare poi si deve, in fase di compilazione del kernel, indicare di non rispettare per forza le specifiche acpi della casa.

bisogna comunque stare attenti e andaer a piccoli passi

Inviato: mer 25 ott 2006, 12:17
da prometeo79
airex ha scritto:i vari lvielli di ferquenza (e relativi voltaggi) permessi sono cablati nel kernel /usr/src/linux/arch/tua_arch/kernel/cpu/cpufreq/file_tuo_tipo_scaling

io sul mio centrino ho messo mano al file speedstep-centrino.c andando a variare le tensioni operative ma si puo' anche modificare il numero/valore dei diversi livelli energetici; per funzionare poi si deve, in fase di compilazione del kernel, indicare di non rispettare per forza le specifiche acpi della casa.

bisogna comunque stare attenti e andaer a piccoli passi

GRANDISSSSIMO!!!!

Questa sera lo proverò sicuramente. L'opzione di non rispettare le specifiche acpi dove la trovo?

Inviato: mer 25 ott 2006, 12:51
da airex
non mi ricordo di preciso il nome dell'opzione e per questo ti ho indicato il "senso", comunque appare nel menu di configurazione dello scaling quando stai preparando il kernel

Inviato: mer 25 ott 2006, 12:54
da prometeo79
airex ha scritto:non mi ricordo di preciso il nome dell'opzione e per questo ti ho indicato il "senso", comunque appare nel menu di configurazione dello scaling quando stai preparando il kernel
Controllerò. Grazie mille

Inviato: mer 25 ott 2006, 20:41
da prometeo79
Ok. Ce l'ho

Codice: Seleziona tutto

static int cpu_family = CPU_OPTERON;

#ifndef CONFIG_SMP
static cpumask_t cpu_core_map[1];
#endif

/* Return a frequency in MHz, given an input fid */
static u32 find_freq_from_fid(u32 fid)
{
        return 800 + (fid * 100);
}


/* Return a frequency in KHz, given an input fid */
static u32 find_khz_freq_from_fid(u32 fid)
{
        return 1000 * find_freq_from_fid(fid);
}

/* Return a frequency in MHz, given an input fid and did */
static u32 find_freq_from_fiddid(u32 fid, u32 did)
{
        return 100 * (fid + 0x10) >> did;
}

static u32 find_khz_freq_from_fiddid(u32 fid, u32 did)
{
        return 1000 * find_freq_from_fiddid(fid, did);
devo modificare la riga relativa al /* Return a frequency in MHz, given an input fid */ ?

Inviato: mer 25 ott 2006, 21:38
da airex
che fai stai modificando?

io sto guardando powernow-k8.h ed è zeppo di utili informazioni

cerca la funzione fill_powernow_table e cio' che è collegata ad essa, pare essere lei a creare i possibili step di frequenza-voltaggio

ps.
la sezione per centrino è terribilmente piu' semplice da modificare!

Inviato: mer 25 ott 2006, 21:39
da 1pixel
io sapevo che il conservative è tipo l'ondemand ma era più "inerziale" e infatti io uso quello con il mio core duo