Modifier la tension d'alimentation d'un CPU AMD Brazos
Par Henri Bauer le vendredi 10 août 2012, 23:01 - Linux - Lien permanent
Il est parfois souhaitable de réduire la tension d'alimentation d'un CPU pour diminuer sa consommation, et donc, l'énergie dissipée par effet Joule.
Cours de physique de terminale S
Rappels sur l'effet Joule : l'intensité qui traverse un conducteur Ohmique est proportionnelle à la tension aux bornes du conducteur. La résistance électrique est le rapport entre ces deux grandeurs :
U = R.i ou i = U/R
La puissance électrique instantanée est égale au produit de la tension et de l'intensité :
P = U.i
Donc, si on exprime la puissance électrique uniquement en fonction de la tension, on obtient (en injectant la première expression dans la seconde) :
P = U²/R
Au final, on constate que la puissance électrique, et donc l'énergie thermique dissipée varie avec le carré de la tension. Pour faire simple, si on divise par 2 la tension d'alimentation, on divise par 4 la chaleur produite. Si on divise la tension par 10, on divise l'énergie dissipée par 100 !
Dans cet article, on n'en arrivera pas à de tels extrêmes, mais c'est simplement pour dire que même une faible réduction de la tension d'alimentation du processeur peut avoir des effets assez intéressants en terme de diminution de l'échauffement.
Un peu de pratique
Le module msr
Le noyau Linux peut modifier les coefficients qui déterminent la tension d'alimentation d'un processeur de la famille AMD Brazos (comme les C50, C60, E350 ou E450...) à l'aide du module msr. Il faut donc tout d'abord s'assurer que ce module est bien chargé en mémoire :
lsmod | grep msr
Si le module n'est pas présent (la commande précédente ne renvoie rien), il suffit de le charger avec :
sudo modprobe msr
Modifier les tensions avec undervolt
Pour modifier les tensions, il faut un programme capable de communiquer avec le module msr. C'est le cas d'undervolt, initialement développé par un français (cocorico) : Thierry Goubier. Pour télécharger les sources, on utilise le gestionnaire de version git. S'il n'est pas installé, il suffit de faire un :
sudo apt-get install git
Puis, on télécharge les sources du projet et on compile :
git clone git://git.code.sf.net/p/undervolt/code undervolt-code cd undervolt-code make sudo mv undervolt /usr/local/sbin/
On peut alors consulter les tensions associées aux différents modes de fonctionnement du CPU (de P0, le plus performant, à P2, le plus économe en énergie) :
sudo undervolt -r
À chaque tension correspond un code en hexadécimal. Plus ce code est grand, plus la tension est abaissée. L'idée est donc d'abaisser les tensions au fur et à mesure, jusqu'à ce que le CPU plante. Comment savoir que le CPU a planté : très simple, la machine se bloque, et c'est parti pour un hard reboot !! Il faut donc y aller doucement, et garder une petite marge de sécurité.
Voici une bonne base de travail proposée par Sinclair_Wilde pour un AMD E450 :
P-state Vid Voltage div 0 0x1E 1.1750V 2.00 1 0x2A 1.0250V 2.50 2 0x3A 0.8250V 4.00
Pour modifier les coefficients selon ces réglages, on utilise la commande suivante :
sudo undervolt -p 0:0x1E -p 1:0x2A -p 2:0x3A
Rendre les modifications permanentes
En l'état, ces réglages sont remis à zéro lorsque l'on redémarre le PC. Pour les rendre permanents, il suffit de répéter la commande à chaque démarrage. Pour rendre la chose automatique, il faut premièrement ajouter le module msr à la liste des modules chargés au démarrage (s'il n'y est pas déjà) en ajoutant la ligne suivante au fichier /etc/modules (nécessite les droits administrateurs) :
msr
On peut ensuite placer la commande undervolt dans le script de démarrage /etc/rc.local (nécessite les droits administrateurs) en ajoutant par exemple les lignes suivantes avant la ligne return 0 :
# Set lower CPU core voltage values with undervolt (requires msr module) # P-state Vid Voltage div # 0 0x1E 1.1750V 2.00 # 1 0x2A 1.0250V 2.50 # 2 0x3A 0.8250V 4.00 /usr/local/sbin/undervolt -p 0:0x1E -p 1:0x2A -p 2:0x3A
Et voilà, il suffit de redémarrer et de vérifier que tout s'est bien déroulé avec un :
sudo undervolt -r
Pour aller plus loin
- Les discussions originales entre thierryg et StApostol
Commentaires
Bonsoir ;o)
Pour la gestion de l'energie sur le DM1, j'utilise Jupiter.
Gestion de l’énergie avec jupiter :
------------------------------------------
sudo add-apt-repository ppa:webupd8team/jupiter
sudo apt-get update
sudo apt-get install jupiter
------------------------------------------
Je ne sais pas si "jupiter" est l'equivalant "undervolt" en ecco energie ...
@tester ;O)
Bonne soiree
D'après ce que j'ai lu sur le site officiel de Jupiter, et concernant la partie CPU, l'applet sert simplement à moduler la fréquence en fonction de la demande et du mode d'alimentation. Après, y'a d'autres ajustements qui sont faits au niveau du noyau, ou d'autres composants (notamment, le WIFI, le bluetooth, etc), mais je n'ai rien lu concernant les tensions d'alimentation. Je pense donc que les deux logiciels sont complémentaires.
jupiterpermet de décider plus finement à quel moment le CPU doit basculer entre les modes de performanceP0,P1etP2, etundervoltdétermine la tension d'alimentation du CPU dans chacun de ces modes de fonctionnement.