LLaumgui plus fort que cpuspeed ?

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 :

[bash]
root@defiant /home/llaumgui> service cpuspeed start
root@defiant /home/llaumgui> service cpuspeed status
cpuspeed est arrêté...
[bash]
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 :

[bash]
#!/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 :

[bash]
#!/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 :

[bash]
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...

2 réactions

  • De arnaud De arnaud - 21/01/2007, 01:31 #1

    Bonjour,

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

    merci

  • De kwa29 De kwa29 - 08/02/2007, 15:18 #2

    Hello,

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

    Voili voilà

Attribution - Partage dans les Mêmes Conditions 4.0 International