Tout dépend à quel niveau de granularité on veut descendre et dans quel but.
Sur mes serveurs Dell, on peut interroger par l’IPMI la consommation électrique au niveau des alimentations. Il y a de plus un compteur qui cumule l’énergie utilisée par le serveur depuis sa fabrication.
Exemple:
Statistic : Cumulative Energy Consumption
Start Time : Tue Feb 16 17:24:31 2016
Finish Time : Wed Jan 20 01:56:11 2021
Reading : 977.1 kWh
Statistic : System Peak Power
Start Time : Tue Feb 16 12:23:30 2016
Peak Time : Fri Sep 25 16:52:12 2020
Peak Reading : 437 W
Statistic : System Peak Amperage
Start Time : Tue Feb 16 12:23:30 2016
Peak Time : Wed Mar 18 13:26:22 2020
Peak Reading : 1.9 A
Pour les sous ensembles, c’est bien plus rare… je n’ai jamais vu de disque dur fournir ce type d’info, et encore moins un ventilateur qui est un bête moteur piloté qui ne renvoie qu’une info: la vitesse à laquelle il tourne pour vérifier qu’il tourne comme attendu.
Côté CPU, le problème est pris dans l’autre sens… granularité très fine avec si j’ai bien compris des consommations mesurées par coeur.
On peut réduire la consommation au moment de la conception même du hardware, ce qui est quand même largement fait, pour faire baisser le chiffre globalement.
L’autre amélioration possible c’est sur la partie logicielle… ce qui s’exécute et les conséquences. Le CPU peut donner des indications directes pour ce qui le concerne, mais toutes les conséquences dans le reste de la machine sont bien difficiles à mesurer car il faudrait tracer que tel code exécuté génère telle I/O sur tel disque ou bus et donc telle consommation.
A part en labo expérimental, je vois difficilement un truc pareil se généraliser.
Le kernel produit énormément de statistiques sur l’activité à partir desquelles on peut (quand on s’en donne la peine) évaluer indirectement l’impact de l’exécution de code.
Rien que comparer la conso globale à la prise au repos, puis en plein calcul permet d’évaluer les Wh pour réaliser telle ou telle tâche.
Il y a un champ énorme de progrès dans ces domaines… surtout quand on voit l’empilement de couches logicielles et de code non compilé tourner sur une machine actuelle, sans parler de tout le code dont on déporte l’exécution sur les clients
Pour un développeur, ça commence par le choix du langage… et donc aussi des langages dans lesquels sont écrits les autres éléments qu’il va utiliser.
Une étude sur le sujet compare quelques algo de base et la conso engendrée en fonction du langage dans lesquels ils ont été implémentés (plus ou moins bien): https://stefanos1316.github.io/my_curriculum_vitae/GKS17.pdf
Rust (qui a la cote) et Java sont les moins bien placés des langages compilés, Go arrive en tête de cette étude qui n’est pas forcément une référence quand on y lit « From all these studies it seems that Java and Python consume a lot of energy and perform slowly in comparison with C/C++ and Assembly. ». Autant dire que la pluie ça mouille !
Désolé, j’ai largement divergé, mais c’est un sujet passionnant.