Pour ceux qui ont suivie ma précédente aventure sous Fedora Core 6 avec mon portable, vous avez pus remarquer que j’avais eu de gros problèmes. Et bien ils sont, depuis peu, tous résolus !
Je vais faire un rapide résumé des problèmes mineurs puis je m’attarderais sur le cas de cpuspeed qui part en vrille sur mon Centrino.
- 1er problème, un kernel i586 -> Bon, bien qu’il existe une solution, cette fois si je me suis retrouvé avec un vrai i686… Va comprendre !
- 2ème problème, Bios bug -> Le bug est toujours là (c’est un bug des BIOS Intel) mais avec le nouveau kernel (2.6.18-1.2849.fc6), je ne m’arrête pas 30 secondes dessus (ça c’était un bug du premier kernel 2.6.18) et je mets pas 2 minutes à lancer mon portable.
- 4ème problème, Plus de WiFi -> Suffisait de récupérer mes fichiers de conf de FC5 ;-).
Maintenant que les menus problèmes sont réparés, attardons nous sur cpuspeed… J’ai tout tenté, même d’installer la dernière version dans le dépôt testing, mais rien ! Pour ceux qui n’ont pas suivie mon aventure sur les forums de fedora-fr, en voici un petit résumé :
Le symptômes :
root@defiant /home/llaumgui> service cpuspeed start
root@defiant /home/llaumgui> service cpuspeed status
cpuspeed est arrêté...
root@defiant /home/llaumgui> /usr/sbin/cpuspeed
Pas de problème ni de message…
Je me tourne vers le fichier de lancement du service cpuspeed (/etc/init.d/cpuspeed) et compare les versions FC5 et FC6
Version FC5 :
#!/bin/sh
# Startup script for cpuspeed
#
# chkconfig: 12345 06 99
# description: Run dynamic CPU speed daemon
# Source function library.
. /etc/rc.d/init.d/functions
[ -f /usr/sbin/cpuspeed ] || exit 0
prog="cpuspeed"
# Get config.
if [ -f /etc/cpuspeed.conf ]; then
. /etc/cpuspeed.conf
fi
start() {
if [ ! -f /var/lock/subsys/cpuspeed ]; then
# Attempt to load scaling_driver if not loaded but it is configured
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver; do
# We want to run the code below only if the
# wildcard above got no matches.
[ ! -f "$file" ] || break
if [ -n "$DRIVER" ]; then
/sbin/modprobe "$DRIVER"
else
# use ACPI as a fallback if its available.
if [ -f /proc/acpi/processor/CPU0/throttling ]; then
# Check we have throttling states available.
thr=`head -n1 -q /proc/acpi/processor/CPU*/throttling | uniq`
if [ "$thr" != "<not supported>" ]; then
/sbin/modprobe acpi-cpufreq
fi
fi
fi
done
# If we get this far with no driver, we must have no ACPI. We're doomed.
[ ! -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver ] && return 0
echo -n $"Starting $prog: "
daemon cpuspeed -d $OPTS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/cpuspeed
else
return 0
fi
return $RETVAL
}
stop() {
if test "x`pidof cpuspeed`" != x; then
echo -n $"Stopping $prog: "
killproc cpuspeed -USR1
killproc cpuspeed -INT
echo
fi
if test "x`pidof cpuspeed`" != x; then
killproc cpuspeed
fi
RETVAL=$?
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/cpuspeed
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status cpuspeed
;;
restart)
stop
start
;;
condrestart)
if test "x`pidof cpuspeed`" != x; then
stop
start
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $RETVAL
Version FC6 :
#!/bin/sh
# Startup script for cpuspeed
#
# chkconfig: 12345 06 99
# description: Run dynamic CPU speed daemon
# Source function library.
. /etc/rc.d/init.d/functions
[ -f /usr/sbin/cpuspeed ] || exit 0
prog="cpuspeed"
# Get config.
if [ -f /etc/cpuspeed.conf ]; then
. /etc/cpuspeed.conf
fi
start() {
if [ ! -f /var/lock/subsys/cpuspeed ]; then
# Attempt to load scaling_driver if not loaded but it is configured
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver; do
# We want to run the code below only if the
# wildcard above got no matches.
[ ! -f "$file" ] || break
if [ -n "$DRIVER" ]; then
/sbin/modprobe "$DRIVER"
else
if [ -d /proc/acpi ]; then
EST=`grep flags /proc/cpuinfo | grep est`
if [ "$EST" ]; then
# use ACPI as a fallback
/sbin/modprobe acpi-cpufreq
# even ACPI didn't work, remove it, and bail out.
if [ -d /sys/devices/system/cpu/cpu0/cpufreq ]; then
/sbin/rmmod acpi-cpufreq
fi
fi
else
# This is a no-ACPI machine. Just exit.
return 0
fi
fi
done
# If we get this far with no driver, we must have no ACPI. We're doomed.
[ ! -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver ] && return 0
drv=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver)
case "$drv" in
centrino|powernow-k8)
/sbin/modprobe cpufreq-ondemand
for i in /sys/devices/system/cpu/cpu*
do
echo ondemand > $i/cpufreq/scaling_governor
done
RETVAL=0
;;
*)
echo -n $"Starting $prog: "
daemon cpuspeed -d $OPTS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/cpuspeed
esac
else
return 0
fi
return $RETVAL
}
stop() {
drv=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver)
case "$drv" in
centrino|powernow-k8)
/sbin/rmmod cpufreq-ondemand
RETVAL=0
;;
*)
if test "x`pidof cpuspeed`" != x; then
echo -n $"Stopping $prog: "
killproc cpuspeed -USR1
killproc cpuspeed -INT
echo
fi
if test "x`pidof cpuspeed`" != x; then
killproc cpuspeed
fi
RETVAL=$?
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/cpuspeed
esac
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status cpuspeed
;;
restart)
stop
start
;;
condrestart)
if test "x`pidof cpuspeed`" != x; then
stop
start
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $RETVAL
Je remarque de suite une nuance, les centrino sont passé en monde ondemand :
case "$drv" in
centrino|powernow-k8)
/sbin/modprobe cpufreq-ondemand
for i in /sys/devices/system/cpu/cpu*
do
echo ondemand > $i/cpufreq/scaling_governor
done
RETVAL=0
;;
Il suffit donc de modifier les lignes en question en virant centrino pour que cpuspeed se lance sans problème comme sous Fedora Core 5…
La question est : pourquoi un ordinateur dont l’architecture est orientée mobilité est forcé en mode ondemand ? ? ? ! ! !
Je vais étudier la question et peut être rapporter un bug… Je reste cependant ouvert à vos remarques…
En attendant, la fréquence de mon ordinateur varie sans problème comme avant…
De arnaud le 21 janvier 2007
Bonjour,
quels lignes il faut enlever dans le fichier /etc/init.d/cpuspeed ?
merci