Ceci est une ancienne révision du document !



Gérer la fréquence du processeur (CPU) par un module noyau

Sauf erreur, la manip doit marcher pour les processeurs suivants:

  • AMD Sempron/Athlon/MP (K7)
  • AMD Duron/Sempron/Athlon/Opteron 64
  • Intel Pentium IV
  • Intel Pentium D
  • Intel Pentium M
  • Intel Core Duo
  • Intel Core 2 Duo

Bien sûr, il faudra que vous adaptiez les chemins relatifs à chaque commande de cette page (Ce tuto a été conçu avec un Intel Core Duo, mais aussi validé sur Edgy pour un Pentium IV). Sous Hardy, les étapes de détermination des bons modules et l'étape de chargement sont inutiles, l'installation devrait s'en être occupé pour vous.

Nous allons automatiser la gestion de la fréquence variable du ou des processeurs pour :

  • Économiser du courant, augmenter le temps de batterie ;
  • Diminuer la chaleur dégagée par le processeur ;
  • Diminuer les bruits des ventilateurs ;
  • Prolonger la durée de vie du matériel.
Autre méthode à explorer qui permet d'obtenir le même résultat (automatiser la gestion de la fréquence) plus simplement avec les paquets installés par défaut : activer le LAPTOP_MODE et lui indiquer dans le fichier de configuration de gérer les gouverneurs en fonction du type d'alimentation en cours (secteur ou batterie). Exemple :
CONTROL_CPU_FREQUENCY=1
BATT_CPU_GOVERNOR=conservative
LM_AC_CPU_GOVERNOR=ondemand
NOLM_AC_CPU_GOVERNOR=ondemand
  • Kernel >= 2.6.9 (Ubuntu à partir de Dapper voire avant)
  • Un processeur supportant une fréquence variable (tous les PC depuis 2004)

Vérifiez que dans votre BIOS, l'option Cool'n'Quiet pour AMD ou SpeedStep pour Intel est activée. Si votre BIOS ne propose pas cette option, elle est sûrement activée par défaut. En outre, certains Bios donnent un nom différent à ces options. Jetez donc un coup d'oeil si besoin dans la doc de votre carte mère.

Veillez à désinstaller tous les programmes modulateurs de fréquence en mode userspace comme powernowd ou cpudyn.

sudo apt-get remove powernowd cpudyn cpufreqd cpufrequtils

On désinstalle ces programmes car nous n'en aurons plus besoin. En effet, la gestion du ou des processeurs sera effectuée directement par les gouverneurs (voir partie 4). En outre, cela pourrait créer des conflits avec la configuration que nous essayons de faire ici.

Pour connaître les specs de votre CPU, vous pouvez entrer la commande suivante:

cat /proc/cpuinfo

Si vous désirez juste le nom de votre ou vos CPU :

grep name /proc/cpuinfo

ou

 sudo lshw -C cpu

ou encore

sudo dmidecode -t processor   

Il existe plusieurs modules de modulation de fréquence selon les processeurs :

  • powernow-k7 pour les AMD Sempron/Athlon/MP (K7)
  • powernow-k8 pour les AMD Duron/Sempron/Athlon/Opteron 64 (K8)
  • p4-clockmod pour les Intel Pentium 4 et pour les Intel Celeron M
  • speedstep-centrino pour les Intel Pentium M/Core Duo/Core 2 Duo (en 64 bits ou sous Edgy/Feisty/Gutsy le module n'existe plus et est remplacé par acpi-cpufreq qui contient tout le support de la technologie Centrino)
  • Il existe d'autres modules si ceux là ne vous conviennent pas (ex: acpi-cpufreq)…

conservative, ondemand, powersave, userspace sont ce que l'on appelle des gouverneurs (gouvernor en anglais). Ils monitorent le système et ajustent la fréquence du CPU en conséquence. Voici leur différences:

  • performance : induit la fréquence maximum du CPU ;
  • ondemand : utilisation de la fréquence minimale puis augmentation au maximum lorsque la charge processeur atteint 100% en fréquence minimale ;
  • conservative : Identique a ondemand, mis à part qu'il passe par les autres fréquences possibles avant d'arriver à la fréquence maxi, ce qui permet de ne pas tout de suite passer le processeur au maximum. Recommandé pour les ordinateurs portables ;
  • powersave : fréquence minimum ;
  • userspace : la frequence est choisie par l'utilisateur. (remarque : si l'on choisit cette option, il faut installer par la suite des services de fond qui gèrent eux-mêmes les changements de fréquence du processeur, par exemple cpudyn etc… C'est justement ce que l'on cherche à éviter).

Charger les modules

Le but maintenant est de contrôler que tout fonctionne (bien) avant d'automatiser la procédure au démarrage. Pour commencer, charger les modules (vous aurez besoin des droits de superutilisateur):

sudo -s
modprobe le_module_de_votre_processeur
modprobe cpufreq_conservative
modprobe cpufreq_ondemand
modprobe cpufreq_powersave
modprobe cpufreq_stats
modprobe cpufreq_userspace

Identifier les chemins menant aux fichiers de config

Repérez maintenant le(s) bon(s) chemin(s) qui mene(nt) à la gestion de vos processeurs:

/sys/devices/system/cpu/cpuI/cpufreq/

Avec I le numero du processeur. Par exemple, dans le cas d'un core duo, I varie entre 0 et 1. Dans le cas d,un pentium M classique il n'y a qu'un dossier cpu0.

Phase de tests

Ce(s) dossier(s) contienne(nt) les fichiers de configuration du processeur. En voici la liste :

  • cpuinfo_cur_freq: la fréquence actuelle de votre proc
  • cpuinfo_max_freq:la fréquence maximum
  • cpuinfo_min_freq: la fréquence minimum
  • scaling_available_frequencies: les fréquences disponibles
  • scaling_available_governors: les gouverneurs disponibles
  • scaling_cur_freq
  • scaling_driver: le drivers du processeur utilisé
  • scaling_governor: le gouverneur en action
  • scaling_max_freq
  • scaling_min_freq

Ces fichiers sont visionnables (utilisez la commande cat nom_du_fichier) et éditables en mode superutilisateur. Après ce petit topo, nous allons maintenant vérifier que tout va fonctionner comme nous le désirons:

  1. cat scaling_available_governors : Nous donne les gouverneurs disponibles pour le processeur (répétez l'opération avec les autres proc si vous en avez)
  2. echo le_gouverneur_que_vous_avez_choisi > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor : vous permet de configurer la gestion de votre processeur avec le gouverneur que vous voulez (La commande echo affiche du texte et le signe > écrit l'output de la commande echo dans le fichier scaling_governor).
  3. Un dossier portant le nom du gouverneur a été crée. Dedans des fichiers de configurations pointus que nous ne toucherons pas ici et que vous ne toucherez que si vous savez VRAIMENT ce que vous faites…
  4. utilisez la commande cat pour savoir si tout fonctionne : cat cpuinfo_cur_freq, cat cpuinfo_max_freq, cat cpuinfo_min_freq , etc.
  5. Utilisez la commande echo quelque_chose > fichier_de_config pour paramétrer comme vous l'entendez (Si, et seulement si, quelque chose ne fonctionne pas, comme par exemple un processeur ne descendant pas en dessous de 2Mhz alors qu'il peut supporter 1Mhz…)
  6. Répétez l'opération avec les autres processeurs si vous en avez et si vous désirez utilisez plusieurs gouverneurs par la suite, faites le test des autres gouverneurs en suivant la même procédure…

Une fois que vos tests ont été concluants, entrez dans un terminal la commande suivante:

sudo nano /etc/modules

Dans le fichier ouvert, copiez les lignes suivantes:

cpufreq_conservative
cpufreq_ondemand
cpufreq_powersave
cpufreq_stats
cpufreq_userspace
LE_MODULE_CORRESPONDANT_A_VOTRE_PROCESSEUR (voire partie 3)

Ici, le but est de pouvoir sauvegarder les paramètres que vous désirez concernant les modules. Ainsi, lorsque vous démarrerez l'ordinateur, les bons paramètres seront pris en considération. Pour réussir cela, installez sysfsutils:

sudo apt-get install sysfsutils

Ouvrez ensuite le fichier de configuration:

sudo nano /etc/sysfs.conf

À l'intérieur de ce fichier, mettez:

devices/system/cpu/cpu0/cpufreq/scaling_governor = LE_GOUVERNEUR_QUE_VOUS_VOULEZ
  • Remarque 1: Vérifiez bien que le chemin correspond chez vous et que le dossier cpu0 existe réellement. En outre, si vous avez un deuxième cœur, il faut aussi le mentionner ici. Ex: devices/system/cpu/cpu1/cpufreq/scaling_governor = LE_GOUVERNEUR_QUE_VOUS_VOULEZ
  • Remarque 2: Chez moi, la fréquence maximale des processeurs était mal reconnue, j'ai donc rajouté pour mon core duo: devices/system/cpu/cpu0/cpufreq/scaling_max_freq = FREQ_MAXIMALE_DE_MON_PROC et devices/system/cpu/cpu1/cpufreq/scaling_max_freq = FREQ_MAXIMALE_DE_MON_PROC
  • Remarque 3: Si votre fréquence minimale était mal reconnue, pensez à aussi la définir ici avec : devices/system/cpu/cpu0/cpufreq/scaling_min_freq = FREQ_MINIMALE_DU_PROC, etc.

Vous pouvez ajouter à votre tableau de bord Gnome l'objet « Moniteur de fréquence CPU » qui vous indique en temps réel la fréquence sélectionnée. Cependant, par défaut elle ne vous permet pas de changer cette fréquence ou de changer de gouverneur. L'usage de cette fonction est en effet réservé à l'usage du super utilisateur (root).

Il est néanmoins possible d'outrepasser cette mesure de sécurité :

sudo dpkg-reconfigure gnome-applets

Répondez simplement « oui » (Entrée) et la modification de fréquence est immédiatement activée dans le moniteur : un menu apparaît en cliquant sur l'icône.

Vous pouvez bien sûr directement changer les fichiers /sys/devices/system/cpu/cpu*/cpufreq/{scaling_set_speed,governor}. Néanmoins, le paquet cpufrequtils vous simplifiera la tâche.

Le paquet cpu-frequtils vous donne accès à deux commandes :

  • cpufreq-info pour afficher l'état
  • cpufreq-set pour changer de féquence et/ou de gouverneur à la volée.

Installez cpufrequtils :

sudo apt-get install cpufrequtils

Vérifiez que tout est paramétré comme vous l'entendez :

cpufreq-info

Exemples d'utilisation de cpufreq-set :

  • Je désire mettre mon cpu0 en mode powersave :
sudo cpufreq-set -c 0 -g powersave
  • Je veux que mon cpu1 soit soit en mode performance mais que la fréquence maximale soit de 1,6Ghz au lieu des 2Ghz d'origine :
sudo cpufreq-set -c 1 -g performance -u 1600000.
  • Pour plus de renseignements :
man cpufreq-set

Et le must du must est de pouvoir ensuite gérer tout cela par interface graphique. Certains d'entre vous auront essayé de comprendre en haut pourquoi l'on indique pas le mode performance dans certains fichiers, mais rassurez-vous, cela est normal (le mode performance est géré automatiquement puisqu'il est déjà connu par l'os). Revenons-en donc à l'installation, il faut donc installer powersaved et kpowersave, donc pour cela :

sudo apt-get install powersaved
sudo apt-get install kpowersave

Lancez kpowersave, et là, magie, une icone apparait en bas à droite dans le systray, double cliquez vous aurez les informations, et clic droit vous aurez la possibilité de changer de profil de performance à la volée, puis de modifier les options de chaque profil avec aisance (temps de veille en mode eco etc…).

Ensuite, le plus pratique serait que ce programme se lance automatiquement au démarrage. Pour les utilisateurs de KDE, il suffit d'ajouter un raccourci pointant vers kpowersave dans ~/.kde/Autostart/ ou si tout comme moi vous n'avez pas pu résister et installé KDE4 alors faites de même dans ~/.kde4/Autostart/

Et le tour est joué !

Docs utilisés pour cet article

  • cpu-frequtils.1233648214.txt.gz
  • Dernière modification: Le 18/04/2011, 14:56
  • (modification externe)