Soucis avec cpuspeed

Fedora

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…

Commentaires

arnaud

De arnaud le 19 novembre 2006

Bonjour,

quels lignes il faut enlever dans le fichier /etc/init.d/cpuspeed ?

merci

kwa29

De kwa29 le 19 novembre 2006

Hello,

La ligne en question est la suivante :
changer
centrino|powernow-k8|p4-clockmod)
pour
powernow-k8|p4-clockmod)

Voili voilà

Les commentaires pour ce poste sont fermés.