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