Underclocking sous Ubuntu

Dans certaines situations, il peut être utile de modifier la fréquence du processeur (CPU) d'un ordinateur pour un usage spécifique. Le cas le plus classique c'est l'overclocking, qui permet de booster la fréquence en dehors des plages conseillées par le constructeur du processeur, afin d'obtenir de meilleurs performances. Même avec une système de refroidissement adéquat cette opération reste risquée, car la montée en chaleur peut provoquer des dommages au processeur ou à d'autres composants.

Une autre pratique très en vogue en ce moment c'est l'underclocking, qui à l'inverse vise à diminuer la fréquence du processeur avec pour objtectifs une diminution de la consommation électrique, un augmentation de la durée de vie des batteries, une diminution du bruit sonor (par le ralentissement des ventilateurs), et aussi parfois l'amélioration de la stabilité du système.

Il y a un moment maintenant, un ami m'a passé un PC sous prétexte qu'il ne valait rien car il avait tendance à rebooter inopinément dès qu'une application un peu lourde était lancée. Il s'agit d'un Dell Inspiron 531. La config : un CPU AMD Athlon 64 X2 5600+, sur carte mère Asus M2N61-AX (socket AM2). Ce PC date grosso-modo de 2007.

Effectivement, le problème de ce PC c'est que le processeur a tendance à monter trop rapidement en température, ne laissant pas le temps au système de refroidissement (par défaut, un simple ventirad mais avec un gros bloc de dissipation) de se mettre rapidement en oeuvre. En effet, en quelques secondes, la température fait des bonds de 20° ne laissant aucune chance à la réactivité du contrôleur d'alimentation du ventilateur.

Entre temps, j'ai installé Ubuntu 10.11 sur cette machine, et c'est sur cette plateforme que je vais vous montrer comment modifier la politique de gestion d'énergie du processeur.

Alors, comment faire?

Le processeur AMD Athlon 64 X2 offre plusieurs interfaces pour la gestion de l'alimentation :

  1. L'ACPI standard,
  2. Le Cool'n'Quiet, qui offre une gestion hardware de l'alimentation du CPU,
  3. Le pilote powernow-k8 qui offre lui aussi des possibilités de configuration.

Nous allons donc installer des outils qui permettent de contrôler la fréquence du processeur. Sur cette configuration, je n'ai pas réussi à trouver comment contrôler les ventilateurs.

Désinstaller tous les logiciels modulateurs de fréquence CPU

En utilisant la commande suivante :

sudo apt-get remove powernowd cpudyn cpufreqd cpufrequtils --purge

Réinstaller les bons outils

sudo apt-get install cpufrequtils cpufreqd

Le package cpufrequtils est - comme son nom l'indiquer - une série d'utilitaires pour gérer la fréquence du CPU. Le package cpufreqd contient un deamon qui va s'occuper de maintenir la configuration que vous lui demanderez.

Editer le fichier de configuration

sudo gedit /etc/cpufreqd.conf

Dans ce fichier, vous trouverez tous les profiles de gestion d'énergie (aussi appelés régulateur ou governor) définies sur votre configuration.

Voici un exemple de profile dans le fichier de config :

[Profile]
name=Performance High
minfreq=50%
maxfreq=90%
policy=performance
#exec_post=echo 8 > /proc/acpi/sony/brightness
[/Profile]

Ici, le profile a pour nom Performance High, et le nom de la politique de régulation associée est performance. Ce qui compte vraiment c'est le champ policy, c'est ce nom que l'on retrouvera ailleurs dans les utilitaires.

Donc, c'est très simple : pour chaque profile, vous pouvez indiquer la fréquence minimale (minfreq) et maximale (maxfreq) que le processeur pourra atteindre. Personnellement, comme certains programmes ont la fâcheuse tendance de modifier eux-mêmes le type de régulateur pour le remettre sur performance à tout bout de champ, j'ai configuré ce profile avec une plage très large, mais limitée à 90%.

Relancer le service

Quand vous avez terminé de configurer le service, fermer le fichier et entrez la commande suivante :

sudo /etc/init.d/cpufreqd restart

Verifier le bon fonctionnement

Maintenant que le service cpufreqd tourne avec la bonne configuration, voici une petite commande pour voir ce qui se passe effectivement :

sudo cpufreq-info

Cette commande doit normalement vous afficher quelque chose comme :

cpufrequtils 007: cpufreq-info (C) Dominik Brodowski 2004-2009
Veuillez rapportez les erreurs et les bogues à cpufreq@vger.kernel.org, s'il vous plait.
analyse du CPU 0 :
pilote : powernow-k8
CPUs which run at the same hardware frequency: 0 1
CPUs which need to have their frequency coordinated by software: 0 1
maximum transition latency: 109 us.
limitation matérielle : 1000 MHz - 2.90 GHz
plage de fréquence : 2.90 GHz, 2.80 GHz, 2.60 GHz, 2.40 GHz, 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz
régulateurs disponibles : conservative, ondemand, userspace, powersave, performance
tactique actuelle : la fréquence doit être comprise entre 1000 MHz et 2.40 GHz.
Le régulateur "performance" est libre de choisir la vitesse
dans cette plage de fréquences.
la fréquence actuelle de ce CPU est 2.40 GHz.
des statistique concernant cpufreq:2.90 GHz:40,40%, 2.80 GHz:2,11%, 2.60 GHz:19,96%, 2.40 GHz:28,14%, 2.20 GHz:0,05%, 2.00 GHz:0,04%, 1.80 GHz:2,49%, 1000 MHz:6,83%  (1152)
...

Et voilà! La fréquence du processeur est bien maintenue au dessous de son maximum, et je peux maintenant lancer de lourdes opérations sans craindre de voir la température monter. En effet, la courbe de progression de la température d'une processeur a tendance à être exponentielle, et donc à grimper rapidement quand on s'approche du seuil maximal. Avec 10% de diminution du CPU, je plafonne à 60°C, loin en dessous du mode passif à 75°C et du seuil critique à 95°C.

Et comment on check la température du CPU ?

Avec :

acpi -t

En conclusion

Cette petite technique, très simple à mettre en oeuvre sous Linux, permet de protéger son matériel contre des pics de températures qui peuvent gravement endommager le matériel. Le plus souvent, la carte mère est sensée réguler le fonctionnement des ressources pour éviter toute mise en danger. Mais il arrive que parfois, dans une chaîne de production pourtant parfaitement industrialisée, certaines pièces soient défectueuses et arrivent au client final avec des défauts importants.

Pour aller plus loin dans ce sujet, vous pouvez consulter la documentation de la gestion CPU du kernel Linux. J'ai aussi trouvé deux articles sur pantz.org et cdrinfo.com qui traitent de CPU frequency scaling.

Et un petit dernier truc pour finir : dans cet exemple, j'utilise cpufreqd car comme c'est un service, il tourne en continu et permet d'appliquer des profiles. Si un autre programme tente de modifier la configuration, cpufreqd va imposer la sienne. Mais si vous avez simplement besoin de modifier ponctuellement cette configuration, vous pouvez utiliser la méthode suivant :

sudo cpufreq-set --help

Commentaires

1. Commentaire de papilinux le samedi 6 avril 2019

Merci de me faire découvrir cette info ! je me permet de faire un lien de ton article dans le mien. Le power-management est un truc bien sympa pour gérer ses perfs.

Je suis tombé aussi sur un autre blog qui explique bien le power-management niveau noyau, si ca t'interresse voici le lien : http://www.linuxembedded.fr/2017/07...

2. Commentaire de papilinux le samedi 6 avril 2019

Correction de mon précdent post, ce que tu écris n'a pas de rapport avec le power management. Même si forcément cela a un impact de jouer sur la frequence du proc sur le power.


About the Author

Ted Marklor est un web designer, un web developer et un génie de la nature. Transcendant le web depuis bientôt 15 ans, Ted est une source d’inspiration et de conseil pour toute une génération de jeunes programmeurs. Le Web 2.0, c’est lui. Dans la vie, il aime aussi faire des avions en papier, s’inventer des pseudonymes et une vie de winner, et surtout parler de lui à la troisième personne. Ça se fait en ce moment sur les blogs…


Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.