Underclocking sous Ubuntu
samedi 14 janvier 2012
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 :
- L'ACPI standard,
- Le Cool'n'Quiet, qui offre une gestion hardware de l'alimentation du CPU,
- 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
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...
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.