# [Résolu][CPU] Comment réguler mon CPU

## zerros

Bonjour,

Je suis sur un ordinateur portable et depuis que j'ai installé gentoo, j'ai l'impression que le CPU tourne à fond.

Mon PC fait un peu plus de bruit que ceux de mes collègues qui ont le même modèle (DELL Latitude E6320).

J'ai installé cpufreq, mais il me dit qu'il ne trouve aucun pilote cpufreq pour mon cpu:

```
analyse du CPU 0 :

  pas de pilotes cpufreq reconnu pour ce CPU

  maximum transition latency: 4294.55 ms.

analyse du CPU 1 :

  pas de pilotes cpufreq reconnu pour ce CPU

  maximum transition latency: 4294.55 ms.

analyse du CPU 2 :

  pas de pilotes cpufreq reconnu pour ce CPU

  maximum transition latency: 4294.55 ms.

analyse du CPU 3 :

  pas de pilotes cpufreq reconnu pour ce CPU

  maximum transition latency: 4294.55 ms.
```

J'ai donc recompilé mon noyau pour intégrer CONFIG_X86_ACPI_CPUFREQ, mais idem ... Comment puis-je réguler mon cpu ?

J'espère que vous pourrez m'aider.

----------

## guilc

cpufreqd ne sert à rien, en tous cas plus depuis quelques temps que le governor ondemand a été mis dans le kernel.

il faut, à minima, activer dans le noyau :

- CONFIG_CPU_FREQ

- CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND

- CONFIG_CPU_FREQ_GOV_ONDEMAND

Ceci va activer par défaut (au boot) le governor ondemand qui est celui qui change la fréquence automatiquement en fonction de la charge CPU. Les seuils de changement de fréquence sont ensuite configurables dans /sys/devices/system/cpu/cpufreq/ondemand.

Et c'est tout, ça roule tout seul  :Smile: 

Pour ma part, je tune comme ça, pour rendre les changements de fréquence plus rapides et qu'ils interviennent lorsque le core est chargé à 25% au lieu de 95% par défaut (c'est plus rentable de monter très fort en fréquence pour accomplir la tâche voulue le plus rapidement possible puis de redescendre, plutôt que de faire la tâche moins vite à fréquence plus faible, du point de vue de la réactivité du desktop) :

```
echo 0 > /sys/devices/system/cpu/cpufreq/ondemand/ignore_nice_load

echo 25 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold

cat /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate_min > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate
```

Un brin de doc là : https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling#Improving_on-demand_performance

----------

## zerros

Super mercciiii  :Smile:  Mon CPU fait déjà moin de bruit et est déjà plus 'froid'  :Smile: 

----------

## xaviermiller

Tu parles du ventilateur, là  :Wink: 

----------

## zerros

euh oui pardon, le ventilo. Je vois qussi que la frequence est ajusté automatiquement en fonction de la charge  :Smile: 

et avec sensors, je vois que la température des cpu est descendu. top  :Smile: 

----------

## chris972

J'ai trouvé la conversation intéressante, et sans vouloir dire de bêtise, je rajouterai qu'il me semble que cpufrequtils soit un peu fait pour gérer tout ça avec son fichier init au boot et sa config :

```
# cat /etc/conf.d/cpufrequtils

# /etc/conf.d/cpufrequtils: config file for /etc/init.d/cpufrequtils

# Options when starting cpufreq (given to the `cpufreq-set` program)

START_OPTS="--governor ondemand"

# Options when stopping cpufreq (given to the `cpufreq-set` program)

STOP_OPTS="--governor performance"

# Extra settings to write to sysfs cpufreq values.

#SYSFS_EXTRA="ondemand/ignore_nice_load=1 ondemand/up_threshold=70"
```

----------

## guilc

En fait j'ai pas tout dit. Mais je me suis fait un script d'init qui permet de changer de governor et configure le ondemand  :Wink: 

Je persiste à dire qu'il n'y a pas besoin d'un démon qui tourne en permanence pour ça alors qu'il suffit juste de claquer 2-3 écho dans /sys pour tout paramétrer, tout le boulot étant fait par le kernel. Même pour changer de comportement suivant qu'on est sur batterie ou secteur (par exemple), pas besoin de démon : suffit de greffer un hook sur pm-utils (qui réagit aux événements acpi) pour switcher la conf !

```
$ cat /etc/init.d/cpu-ondemand 

#!/sbin/runscript

# Copyright 1999-2011 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

extra_commands="min max ondemand"

description="Apply and tune CPU governor policy"

depend() {

    need localmount

}

_set_governor() {

    ebegin "Setting $1 governor"

    for cpu in $(find /sys/devices/system/cpu/ -type d -name 'cpu?')

    do

        cpufreq=${cpu}/cpufreq

        echo $1 > ${cpufreq}/scaling_governor

    done

    eend $?

}

ondemand() {

    _set_governor ondemand

    ebegin "Configuring ondemand governor"

    cpufreq=/sys/devices/system/cpu/cpufreq/ondemand

    echo 0        > ${cpufreq}/ignore_nice_load

    echo 25       > ${cpufreq}/up_threshold

    #echo 2        > ${cpufreq}/sampling_down_factor

    cat ${cpufreq}/sampling_rate_min > ${cpufreq}/sampling_rate

    eend $?

}

max() {

    _set_governor performance

}

min() {

    _set_governor powersave

}

start() {

    ondemand

}

stop() {

    max

}
```

Enfin, ce n'est que mon avis  :Smile: 

----------

## chris972

Qui a parlé de démon ?

Par moi en tout cas. Cpufrequtils n'est absolument pas un démon. Ce n'est pas parce qu'il est lancé au boot qu'il continue à tourner pour autant.

En plus clair, cpufrequtils fait exactement la même chose que ton script, et fourni des outils pour paramétrer et analyser tout ça.

Tu as déjà au moins installé une fois cpufrequtils pour m'avoir répondu ça ?

----------

## guilc

En parlant de démon, je pensais plus à cpufreqd entre autres, qui au lieu d'utiliser le governor ondemand, utilise le governor userspace et switche lui même la fréquence en fonction de la charge, truc sous-optimal par excellence (comme le font tant d'autres démons type cpudyn, cpu-speedy, etc..., et autres modules gkrellm et compagnie).

Concernant cpufrequtils, non, jamais essayé. Tout ce que je vois aujourd'hui, c'est un truc avec une home page morte, donc qui risque de passer au treecleaner sous peu. Visiblement projet mort depuis 2-3 ans. Et en 2-3 ans, l'interface kernel dans le sysfs à bougé... Bref, un projet qui ne me donne pas envie de l'essayer. Accessoirement : https://bugs.gentoo.org/show_bug.cgi?id=408193

Mais je dois y mettre de la mauvaise volonté sans doute  :Razz: . Je dois aussi avoir un TOC anti-bloat lorsque 1 écho dans le sysfs suffit... Je vois pas quel besoin il y a d'installer un soft en plus avec quelques milliers de lignes de code au lieu d'un simple écho...

Mais bon, ça doit sans doute être mon côté vieux geek acariâtre qui parle.

PS: et ne prend pas la mouche s'il te plaît, je n'ai agressé personne...

----------

## chris972

 *guilc wrote:*   

> Mais je dois y mettre de la mauvaise volonté sans doute .

 

confirmé.

 *Quote:*   

>  Je dois aussi avoir un TOC anti-bloat lorsque 1 écho dans le sysfs suffit... Je vois pas quel besoin il y a d'installer un soft en plus avec quelques milliers de lignes de code au lieu d'un simple écho...

 

Un simple echo qui t'a vallu de passer du temps à écrire un script qui est EXACTEMENT l'objet de cpufrequtils, en mieux fait, et plus complet.

 *Quote:*   

> Mais bon, ça doit sans doute être mon côté vieux geek acariâtre qui parle.

 

Confirmé (bis).

Quant à l'obsolescence de la chose, ça frise la mauvaise foi. Il y a tant d'outils sous linux qui n'ont pas été touchés depuis des années tout simplement parce qu'il font bien ce qu'ils ont à faire et qu'ils ne peuvent pas mieux faire. Ton script, tu penses le retoucher tous les 3 mois pour lui donner un cosmétique coup de jeune ou lui foutre la paix s'il te convient pendant 10 ans ?

Bref. Tu ne connaissais pas, et ne connais toujours pas cpufrequtils, mais tu sembles vivement vexé qu'un outil existe pour ce que tu t'es décarcassé à faire à la main. Alors ton orgueil t'empêche juste de dire : "ouais, c'est vrai, c'est pas mal, j'aurais pu utiliser ça".

Allez, je te laisse le mot de la fin, thread fini pour moi. Tu as l'air jusqu'auboutiste, tu apprécieras donc le geste  :Wink: 

----------

## guilc

 *chris972 wrote:*   

> Quant à l'obsolescence de la chose, ça frise la mauvaise foi. Il y a tant d'outils sous linux qui n'ont pas été touchés depuis des années tout simplement parce qu'il font bien ce qu'ils ont à faire et qu'ils ne peuvent pas mieux faire. Ton script, tu penses le retoucher tous les 3 mois pour lui donner un cosmétique coup de jeune ou lui foutre la paix s'il te convient pendant 10 ans ?

 

Bah figure toi que justement, mon script il a bougé en novembre 2010, quand la structure du sysfs a un brin changé (soit après la dernière mouture de cpufrequtils)...

 *Quote:*   

> Bref. Tu ne connaissais pas, et ne connais toujours pas cpufrequtils, mais tu sembles vivement vexé qu'un outil existe pour ce que tu t'es décarcassé à faire à la main. Alors ton orgueil t'empêche juste de dire : "ouais, c'est vrai, c'est pas mal, j'aurais pu utiliser ça".
> 
> Allez, je te laisse le mot de la fin, thread fini pour moi. Tu as l'air jusqu'auboutiste, tu apprécieras donc le geste 

 

Utiliser 5000(*) lignes de C, non maintenu, au lieu de faire la même chose en quelques lignes de shell et 5 minutes de lecture de la doc (/usr/src/linux/Documentation/cpu-freq/governors.txt), désolé mais ça me fait toujours pas envie de découvrir.

Et ne t'en déplaise, je ne me suis pas "décarcassé" à le faire à la main, si j'y ai passé 15 minutes, tests et lecture de doc comprise, c'est bien le bout du monde. Et il en faut plus pour me vexer.

Entre nous, vu ta réaction (et là pour le coup, limite les insultes via tes citations soulignant certains de mes propos : heureusement que je ne suis pas susceptible, parce que dans le monde d'où je viens, tes 2 remarques "confirmé" sont extrêmement impolies et incorrectes), c'est bien à se demander qui prend la mouche et est un jusqueboutiste.

On est sur un forum, on expose nos point de vue, on n'est pas obligé d'être d'accord. C'est même le principe. Je te dis que je préfère mes quelques lignes de shell rassemblées dans un pauvre script d'init qu'un gros tas de C pas maintenu, c'est mon droit non ? Tu as aussi le droit de ne pas être d'accord, mais tu n'est pas non plus obligé d'agresser pour ça... Pour le coup, ça ne me fera pas plus changer d'avis.

Si ça te satisfait, tant mieux pour toi. Et si ça te dis, quand tu auras pris ta camomille pour lâcher un peu la pression, tu pourras aussi nous expliquer pourquoi wrapper un pauvre echo sur le sysfs (sysfs qui est exactement prévu pour ça) dans du C serait "mieux fait"... Parce que si c'est pour faire des interfaces kernel accessibles uniquement en C, autant tout passer par du netlink (http://en.wikipedia.org/wiki/Netlink) et virer les sysfs et procfs. En voilà une idée à donner aux devs kernel tiens, echo c'est trop sale.

Quant à mon orgueil et mon amour propre qui m'empêcheraient de reconnaître que zut, je me suis planté... Si tu me connaissais, tu saurais que je reconnais très volontiers avoir tord et que je ne demande qu'à découvrir des trucs. Mais il se trouve que dans le cas présent, je pense que outre le fait que c'est plus ou moins à l'abandon, c'est à mon sens du bloatware inutile, pour les raisons citées plus haut.

*

```
$ find -name "*.[c|h]" | xargs wc -l

   113 ./debug/x86_64/centrino-decode.c

    96 ./debug/x86_64/powernow-k8-decode.c

   196 ./debug/i386/dump_psb.c

    78 ./debug/i386/intel_gsic.c

   113 ./debug/i386/centrino-decode.c

    96 ./debug/i386/powernow-k8-decode.c

   113 ./debug/kernel/cpufreq-test_tsc.c

   640 ./lib/sysfs.c

   216 ./lib/proc.c

   215 ./lib/cpufreq.h

    76 ./lib/interfaces.h

   255 ./lib/cpufreq.c

    50 ./bench/parse.h

    29 ./bench/system.h

   224 ./bench/parse.c

   184 ./bench/benchmark.c

   203 ./bench/main.c

    27 ./bench/benchmark.h

    36 ./bench/config.h

   188 ./bench/system.c

   387 ./build/ccdv.c

   629 ./utils/info.c

   375 ./utils/set.c

   427 ./utils/aperf.c

    63 ./utils/cpuid.h

  5029 total
```

----------

