Rendere il sistema più fluido
Spesso, utilizzando applicazioni come mplayer o tvtime, si osserva che spostando le finestre nell’area di lavoro la riproduzione dei filmati diventa “scattosa”. Un fenomeno analogo si ha quando un servizio è attivo in background (ad esempio il demone di indicizzazione di beagle) e le applicazioni in primo piano diventano meno responsive; o ancora quando si tenta di riprodurre un file musicale in formato midi e il tempo sembra “scivolare” privo della regolarità che ci si aspetterebbe.
Ciò accade perché i programmi lanciati dall’utente si dividono l’utilizzo del processore a intervalli scanditi dal Real Time Clock la cui ampiezza è determinata dalla variabile max-user-freq. Il valore predefinito, che si può leggere con il comando
$ cat /proc/sys/dev/rtc/max-user-freq 64
è spesso troppo basso. Con un valore del genere vengono generati 64 interrupt ogni secondo che le applicazioni utente possono sfruttare per “infilarsi dentro al processore” e fare quel che devono. Di conseguenza quando intervengono applicazioni con priorità più alta (come il window manager di GNOME metacity, quando si spostano le finestre) agli altri processi rimane meno tempo utile per le loro operazioni, e può capitare che non riescano ad eseguire il loro compito nel tempo prestabilito (ad esempio mplayer può saltare la codifica di alcuni fotogrammi, in modo che il tempo trascorso dall’inizio del filmato coincida con il tempo reale).
Il valore così basso è imposto da una politica di tipo conservativo: un valore elevato su vecchi processori può provocare l’accumulo di interrupt con conseguente degrado delle prestazioni. Su una macchina recente tuttavia, il valore predefinito è basso e può provocare i fastidiosi saltellamenti riportati negli esempi.
Ci sono alcuni modi diversi per sistemare la faccenda.
Il primo è temporaneo e la modifica è valida solo fino al successivo riavvio (il comando va dato con i privilegi di amministratore):
# echo 1024 > /proc/sys/dev/rtc/max-user-freq # cat /proc/sys/dev/rtc/max-user-freq 1024
Anche questo secondo metodo è temporaneo:
# sysctl dev/rtc/max-user-freq=1024
Per rendere permanenti le modifiche si può utilizzare un metodo un po’ meno pulito, consistente nello scrivere nel file /etc/rc.local la riga:
echo 1024 > /proc/sys/dev/rtc/max-user-freq
oppure il metodo del buon amministratore di sistema, che consiste nell’aggiungere al file /etc/sysctl.conf la direttiva:
# Sets the max-user-freq to 1024 to enhance video and games performances dev.rtc.max-user-freq = 1024
Nota: la spiegazione degli interrupt generati dal Real Time Clock e di come vengono utilizzati è solo spannometrica. Se si desidera saperne di più sull’argomento, si può fare riferimento alla pagina man rtc e alla documentazione del kernel (che nel caso di Fedora si trova in /usr/share/doc/kernel-doc-<versione>/Documentation/rtc.txt).
Aggiornamento!
Nei più recenti kernel il Real Time Clock è stato sostituito dal High Precision Event Timer (HPET), perciò bisogna sostituire hpet ad ogni occorrenza di rtc:
# echo 1024 > /proc/sys/dev/hpet/max-user-freq # cat /proc/sys/dev/hpet/max-user-freq 1024
In /etc/sysctl.conf va inserita la direttiva:
# Sets the max-user-freq to 1024 to enhance audio/video performances dev.hpet.max-user-freq = 1024
Alla prossima!
ClaudioT :: lug.26.2007 :: Fedora, Linux, Tutorial :: No Comments »