Un script Python pour suivre les fréquences, tension et température du SoC d'un Raspberry Pi

Chaud cacao !
Un script Python pour suivre les fréquences, tension et température du SoC d'un Raspberry PiCrédits : ra2studio/iStock/Thinkstock

La hausse de performances du Raspbery Pi 4 ne s'est pas faite sans impacts négatifs, notamment la température du SoC. Pour nos tests, nous avons développé un script Python permettant de la surveiller, ainsi que les fréquences. Nous le publions en open source.

Le Raspberry Pi 4 utilise un nouveau SoC, plus efficace et plus rapide. Cadencé jusqu'à 1,5 GHz, son intégration reste assez basique, notamment le refroidissement. 

En effet, la fondation ne propose aucun système de dissipation complémentaire ou d'éléments pour ajouter simplement un ventilateur. Pourtant, la chaleur dégagée par sa nouvelle carte est importante, tout comme la température relevée au sein du boîtier officiel lorsqu'il est fermé, même au repos.

Des choix critiqués, d'autant que l'équipe communique allègrement sur les performances en hausse de la bête, qui correspondent à un cas idéal où le SoC n'atteint pas ses limites de chaleur. C'est pourtant rapidement le cas. La fondation a promis des améliorations via le firmware pour réduire la consommation de sa puce, et donc son échauffement. Une promesse qu'il faudra vérifier.

Nous avons donc développé un petit script pour suivre l'évolution de quelques informations du SoC dans le temps.

Notre script Python

Il utilise vcgencmd qui permet de relever des valeurs ou des éléments de configuration du Raspberry Pi. Vous pouvez obtenir la liste des commandes pouvant être utilisées en tapant cette ligne dans un terminal :

vcgencmd commands

Nous avons utilisé Python, présent nativement au sein de Raspbian, permettant facilement de manipuler des données et des fichiers CSV. L'objectif est en effet de garder un historique des valeurs sur une période donnée. Nous pourrons ainsi les exploiter dans un graphique si nécessaire.

Le script est simple, définissant un délai en secondes entre chaque relevé (2 par défaut) puis le nom du fichier à utiliser. Le compteur est ensuite initialisé à 0. Une première méthode permet l'écriture de valeurs dans le fichiers CSV sous forme de lignes ajoutées les unes aux autres. Une autre permet l'extraction d'une valeur flottante depuis un texte. C'est nécessaire puisque vcgencmd ne renvoie pas seulement la valeur demandée.

Une fois toutes ces méthodes définies, on passe à l'affichage du résultat et à l'écriture du fichier CSV. Celui-ci est initialisé avec un en-tête comprenant le nom des différentes valeus relevées, ce qui aide à sa comprehension. On attend ensuite le délai demandé.

Pour lancer, vous pouvez utiliser la commande suivante :

wget -qO- https://gist.github.com/davlgd/07f6288e869519acb695774e146a20b6/raw/09be19d5e96a627a33f444ea8db511245066dc7e/pi_soc_monitor.py | python

Près de 70 °C au repos avec le boîtier officiel

Lors de nos relevés, nous avons utilisé un Raspberry Pi 4 Model B équipé de 4 Go de mémoire, connecté à un écran (sans 4Kp60) et un clavier/souris. Bluetooth et Wi-Fi étaient désactivés, au profit de la seule connexion réseau filaire. Boîtier fermé, le SoC se stabilise entre 66 et 68°C au repos, contre 62 à 64°C boîtier ouvert dans une pièce à 24°C.

La puce est chaude au toucher, confirmant que ce n'est pas une erreur logicielle. Sa fréquence est alors bien de 600 MHz (Core) et 250 MHz (ARM), contre 1 500/500 MHz en charge. Seule sa tension ne bouge pas et reste à 0,85 V, contre 1,20/1,34 V pour le SoC d'un Raspberry Pi 3B+. 

Dès que l'on sollicite l'ensemble des cœurs, on atteint vite une température limite à un peu plus de 80°C. Une sécurité s'enclenche alors, limitant la fréquence de fonctionnement à 1 GHz, avec un impact important sur les performances. On voit très nettement cette zone dans nos relevés, et la conséquence sur un simple test OpenSSL :

openssl speed --multi $(nproc) rsa4096

Signatures RSA 4096 bits par seconde :

  • 4B à 1,5 GHz : 38
  • 4B à 1,0 GHz : 31 (-18 %)
  • 3B+ : 21

Vérifications RSA 4096 bits par seconde :

  • 4B à 1,5 GHz : 2 593
  • 4B à 1,0 GHz : 1 750 (- 32 %)
  • 3B+ : 1 444

Chaque test d'une vingtaine de secondes suffit à faire prendre 10°C au SoC du Pi 4, jusqu'à ce que sa température limite soit atteinte. Ce même phénomène ne s'observe pas sur un Raspberry Pi 3B+ dont la température au repos se situe entre 53/54°C, contre 77°C même après une dizaine de tests. On retombe rapidement à moins de 60°C.

Nous reviendrons dans un prochain article sur les solutions qui peuvent être mises en place pour améliorer la situation, en attendant des évolutions proposées directement par la fondation.

Températures Raspberry Pi 4 Model B ReposTempératures Raspberry Pi 4 Model B ChargeTempératures Raspberry Pi 3 Model B+ Charge
Le Raspberry Pi 4 Model B au repos puis en charge puis le Raspberry Pi 3 B+ en charge

2000 - 2021 INpact MediaGroup - SARL de presse, membre du SPIIL. N° de CPPAP 0321 Z 92244.

Marque déposée. Tous droits réservés. Mentions légales et contact