Repository 32bit  Forum
Repository 64bit  Wiki

script per gestire frequency scaling su portatili

Scrivete su questo forum se avete problemi o volete dare buoni consigli sui computer portatili (Laptop).

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Citare il modello preciso del laptop in questione.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

script per gestire frequency scaling su portatili

Messaggioda supertoms » dom set 11, 2005 14:36

Ho creato questi 2 script per gestire le funzioni del kernel 2.6 per il frequency scaling sul mio portatile Acer TravelMate 4000WLMI.
Li ho recentemente aggiornati dopo il passaggio al 2.6.13; ora possono gestire qualunque numero di "governors", perchè li leggono direttamente dal file /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors e vanno a modificare il file scaling_governor, facendo cambiare il comportamento alla CPU.
script set_governor
Codice: Seleziona tutto
#!/bin/bash
#
#written by T0ms
#V      1.2     11/set/2005
#
#NAME: set_governor
#change interactively the frequency governor for kernel 2.6
#
#-----------VAR------------------
APLDIR="/sys/devices/system/cpu/cpu0/cpufreq"
FILE="$APLDIR/scaling_governor"
GOVFILE="$APLDIR/scaling_available_governors"
COUNT=`cat $GOVFILE|wc -w`

#-----------METHODS--------------
function my_help()
{
        echo "Usage: \
        `basename $0` [1-$COUNT]: "
        for i in `cat $GOVFILE`; do echo $i; done | cat -b
        exit 0;
}

#-----------MAIN-----------------
#echo DEBUG
#echo $# $1

if [ $# -ge 1 ] && [ $1 -ge 1 ] && [ $1 -le $COUNT ]
then
        GOV=`cut -d ' ' -f $1 $GOVFILE`
        echo $GOV > $FILE
        echo CPU Governor is Now `cat $FILE`
else
        my_help
fi



Il secondo usa il primo per cambiare ciclicamente il governo; lo uso associato ad una combianzione di tasti.
script chgov
Codice: Seleziona tutto
#!/bin/bash
#
#written by T0ms
#V      1.2     11/set/2005
#
#NAME: chgov
#change cpu governor
#

#-----------VAR------------------
APLDIR="/sys/devices/system/cpu/cpu0/cpufreq"
GOVFILE="$APLDIR/scaling_available_governors"
COUNT=`cat $GOVFILE|wc -w`
IDFILE="/var/tmp/governor.id"
PATH="/usr/bin:$PATH"
#-----------MAIN----------------
if [ ! -f $IDFILE ]
then
        echo 1 >  $IDFILE
fi

GOVID=`cat $IDFILE`
set_governor $GOVID
echo $(( (++GOVID % $COUNT)+1 )) > $IDFILE



Ho usato le informazioni in questa pagina per configurare i tasti e le scritte on-display (in generale quasi tutto il porti l'ho configurato da qui); così premendo fn+f3 cambio la configurazione della cpu.
La mia configurazione di xbindkey relativa è la seguente
Codice: Seleziona tutto
"sudo chgov | xosd -- -"
  c:223


that's all, folks!
ciao
Avatar utente
supertoms
Linux 1.0
Linux 1.0
 
Messaggi: 89
Iscritto il: mar giu 21, 2005 23:00
Località: Lissone Monza Italy

Messaggioda gallows » dom set 11, 2005 15:58

Wow, anche io ne ho preparato uno per il mio nuovo laptop.
L'ho provato poco, peró dovrebbe funzionare:
Codice: Seleziona tutto
#!/bin/bash
#
# cpuscaling v. 0.0.1 - 10.09.2005
# by gallows <gallows@tiscali.it>
#
# suggest: put this in /usr/sbin

# set some variables:
SYSDIR="/sys/devices/system/cpu/cpu0/cpufreq"
AVAILABLE_GOVERNORS="$SYSDIR/scaling_available_governors"
GOVERNOR="$SYSDIR/scaling_governor"
FREQMAX="$SYSDIR/scaling_max_freq"
FREQMIN="$SYSDIR/scaling_min_freq"
FREQCUR="$SYSDIR/scaling_cur_freq"
FREQS="$SYSDIR/scaling_available_frequencies"

function usage() {

  cat << EOF
Usage:
 cpuscaling [ governor ], [ -show-freqs ], [ -fmax,-fmin ] FREQ

  conservative      Tune governor to conservative
  ondemand      Tune governor to ondemand
  performance      Tune governor to performance
  powersave      Tune governor to powersave
  userspace      Tune governor to userspace

  -freqs      Print frequences supported by your CPU
  -fmax FREQ      Set max frequence
  -fmin FREQ      Set min frequence
  -state      Show current state

  -help         Print this help and exit
EOF
}

function only_root() {
 
  echo "Only superuser can do it."
  exit 1
}

function something_wrong() {

  echo "Check your kernel settings."
  exit 1
}

function no_freq() {

  echo "Please choose a frequence."
  exit 1
}

function show_state() {

  echo -ne "governor:\\t `cat $GOVERNOR`\\n"
  echo -ne "current :\\t `cat $FREQCUR` Hz\\n"

  [ "$GOVERNOR" == "performance" ] && exit 0

  [ "$GOVERNOR" == "conservative" ] && {
     echo -ne "freq:\\t `cat $FREQMIN` Hz\\n"
     exit 0
  }
 
  echo -ne "freq min:\\t `cat $FREQMIN` Hz\\n"
  echo -ne "freq max:\\t `cat $FREQMAX` Hz\\n"
}

function show_freqs() {

  cat $FREQS
  exit 0
}

function freq_min() {

 [ "$UID" != "0" ] && only_root

  echo -n $FREQ > $FREQMIN
  show_state
  exit 0
}

function freq_max() {

 [ "$UID" != "0" ] && only_root

  echo -n $FREQ > $FREQMAX
  show_state
  exit 0
}

function set_governor() {

  [ "$UID" != "0" ] && only_root

  grep -q $NEW_GOVERNOR $AVAILABLE_GOVERNORS || {            # if it's n/a try   
    /sbin/modprobe cpufreq_$NEW_GOVERNOR || something_wrong # to load module
  }
  echo $NEW_GOVERNOR > $GOVERNOR
  exit 0
}

# parser:
case "$1" in
'conservative')
  NEW_GOVERNOR="conservative"
  set_governor
  ;;
'ondemand')
  NEW_GOVERNOR="ondemand"
  set_governor
  ;;
'performance')
  NEW_GOVERNOR="performance"
  set_governor
  ;;
'powersave')
  NEW_GOVERNOR="powersave"
  set_governor
  ;;
'userspace')
  NEW_GOVERNOR="userspace"
  set_governor
  ;;
'-freqs')
  show_freqs
  ;;
'-fmax')
  [ -z "$2" ] && no_freq
  FREQ="$2"
  freq_max
  ;;
'-fmin')
  [ -z "$2" ] && no_freq 
  FREQ="$2"
  freq_min
  ;;
'-state')
  show_state
  ;;
'-help')
  usage
  ;;
*)
  usage
esac

## EOF ##
Avatar utente
gallows
Staff
Staff
 
Messaggi: 3466
Iscritto il: dom set 19, 2004 23:00
Località: Palermo
Kernel: FreeBSD 8.0-RELEASE-p3
Desktop: ratpoison

Messaggioda sloboda » lun ott 10, 2005 9:18

Domanda: per fare funzionare questo script cosa è necessario fare, supponendo di avere installato il pacchetto del kernel 2.6.13?
E' necessario ricompilare il kernel? Quali moduli occorre aggiungere? quali altri programmi è necessario installare?

Grazie,
Sergej
sloboda
Linux 1.0
Linux 1.0
 
Messaggi: 22
Iscritto il: sab giu 04, 2005 23:00
Località: Casteddu

Messaggioda supertoms » lun ott 10, 2005 12:37

per il mio nessun programma aggiuntivo (al limite xosd se vuoi anche le scritte sul display).
non so se nel pacchetto del kernel è abilitato il ramo del frequency scaling, altrimenti devi ricompilare il kernel includendo ciò che ti serve. Non ho ora i dettagli delle impostazioni, ma dal menù di configurazione sono vicini ai settaggi acpi
Avatar utente
supertoms
Linux 1.0
Linux 1.0
 
Messaggi: 89
Iscritto il: mar giu 21, 2005 23:00
Località: Lissone Monza Italy

Messaggioda supertoms » mar ott 25, 2005 20:57

per la serie SONO UN LAMER ecco una piccola patch:
non mi ero accorto che i valori calcolati dall'istruzione di incremento nello script chgov avanzavano di 2 al posto che di 1. Tutto per evitare il valore zero che non esiste, ho aggiunto un "+1" senza provare.
(capitemi, ho scritto sti cosi in treno).
così "dovrebbe" essere giusto.
Codice: Seleziona tutto
#!/bin/bash
#change cpu governor
#
#written by T0ms
#V      1.3     25/ott/2005
#

#-----------VAR------------------
APLDIR="/sys/devices/system/cpu/cpu0/cpufreq"
GOVFILE="$APLDIR/scaling_available_governors"
COUNT=`cat $GOVFILE|wc -w`
IDFILE="/var/tmp/governor.id"
PATH="/usr/bin:$PATH"
#-----------MAIN----------------
if [ ! -f $IDFILE ]
then
        echo 1 >  $IDFILE
fi

GOVID=`cat $IDFILE`
set_governor $GOVID
echo $(( (GOVID % COUNT)+1 )) > $IDFILE

Avatar utente
supertoms
Linux 1.0
Linux 1.0
 
Messaggi: 89
Iscritto il: mar giu 21, 2005 23:00
Località: Lissone Monza Italy


Torna a Laptop

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti