Dans un précédent billet de ce blog, je m'étais intéressé aux fonctionnalités de Windows 7 permettant d'optimiser la consommation électrique. En filigrane de ce billet apparaissait une déduction simple: plus la puissance de l'ordinateur est utilisée, plus il consomme d'électricité. Autrement dit: nos actions et les performances des applications que nous utilisons ont un impact direct sur la consommation électrique de notre poste de travail.
Est-ce vraiment aussi évident que ça ? Voilà qui a aiguisé ma curiosité et j'ai eu envie de le vérifier. Ce billet décrit donc ma tentative pour valider cette hypothèse et en tirer les conclusions qui en découlent.
Processus expérimental
Schématiquement, même s'il y a d'autres ressources dans un PC (écran, disque, périphériques, …) j'ai décidé de limiter mon expérimentation à: "démontrer que la consommation électrique est directement liée à l'utilisation du processeur de la machine". Comme, à l'exception des processus système, l'utilisation CPU dépend des applications qui s'exécutent sur la machine, la réponse à cette question me permettra de répondre à mon interrogation de départ.
Evidemment, pour démontrer cela il me fallait disposer d'outils de mesure. Mais pas seulement des outils de mesure instantanée (quelle est l'utilisation CPU ou la consommation électrique à un instant T ?) mais des outils de mesure fonctionnant dans la durée.
Tracer la consommation CPU
Pour la CPU, on pense tout de suite au gestionnaire de tâches que tous les utilisateurs de Windows connaissent.
Pourtant, il ne répond pas à mon besoin car évidemment mon objectif est de pouvoir disposer de données brutes (type Excel CSV) que je pourrais restituer graphiquement. En faisant quelques recherches sur Internet j'ai trouvé différents outils mais aucun ne correspondait exactement à ce que j'attendais. Bref, j'ai donc développé mon propre outil (on ne se refait pas ) avec des fonctionnalités très simples: lire la consommation CPU et l'écrire à l'écran et dans un fichier.
Heureusement rien de très compliqué à développer, globalement toute la complexité du programme s'écrit en deux lignes de code .NET: récupérer le compteur de performance du système correspondant à la CPU, et le formater pour ensuite l'enregistrer.
Tracer la consommation électrique
Pour récupérer la consommation électrique, je disposais déjà d'un boitier de mesure s'insérant entre la prise et l'appareil électrique à mesurer (voir ici). Mais cet appareil se contente d'un affichage LCD ce qui ne permet évidemment pas de faire une mesure dans la durée. Suite à un article sur GreenIT.fr, j'ai donc fait l'acquisition d'un appareil un peu plus évolué: l'Energy Logger 4000 de Voltcraft.
L'avantage: il dispose d'un affichage LCD mais peut aussi recevoir une carte SD (non fournie et obligatoirement <= 2Go !) pour récupérer un ensemble de mesures sur plusieurs jours, voir plusieurs semaines.
Mieux: une petite application fournie avec le boitier (et assez peu ergonomique il faut le dire) permet de visualiser ces informations et aussi de les extraire au format CSV.
J'ai donc maintenant la capacité de mesurer à la fois la consommation CPU et la consommation électrique dans la durée: me voilà donc prêt à l'expérimentation.
Mesure journalière
Assez naïvement, j'ai d'abord voulu étudier si la corrélation entre la consommation électrique et la CPU était visible au quotidien. J'ai donc mis en place le processus expérimental sur ma propre machine (un Dell Latitude E6400) pendant une journée de travail au bureau (ordinateur portable sur son socle). Voici une photo de l'appareillage.
J'ai donc lancé les mesures en début de journée et, à la fin de la journée, j'ai récupéré les données brutes et j'ai généré via Excel deux courbes que voici (cliquez sur l'image pour voir le détail).
La courbe du haut indique la consommation en Watt, la courbe du bas la consommation CPU en pourcentage. Disons le franchement: la corrélation entre les deux courbes ne saute pas aux yeux !
Deux choses sont quand même à noter :
1) L'échantillonnage n'est pas le même entre les deux outils de mesure. Le Voltcraft réalise une mesure toutes les minutes (c'est peu) alors que j'ai programmé la mesure de la CPU toutes les 10 secondes. C'est ce qui fait que la courbe CPU est très découpée alors que celle de la consommation l'est forcément moins. Il est d'ailleurs tout à fait possible qu'un pic de consommation CPU de moins d'une minute passe complètement inaperçu dans la courbe de consommation.
2) Le Voltcraft ne mesure pas uniquement la consommation CPU mais la consommation de tout l'ordinateur sur son socle. En l'occurrence, il s'avère que le pic de consommation descendant (A sur le schéma) pendant la première heure de consommation est dû… au rechargement de la batterie de l'ordinateur.
Une fois ces limites posées et en analysant plus finement les courbes, on constate néanmoins que tous les soubresauts de la courbe de consommation CPU se retrouvent dans la courbe de consommation électrique. Voir en particulier les points B, C et D.
Même si le résultat n'est pas tout à fait concluant, il donne donc une bonne indice de la corrélation entre les deux courbes.
Je stresse
Pour valider plus précisément ces premiers résultats, j'ai décidé de refaire un ensemble de mesures de manière un peu plus "artificielle".
Concrètement l'idée est de tester la consommation électrique pour différents niveaux d'utilisation de la CPU. Arbitrairement, j'ai décidé de définir 3 niveaux de consommations:
Pour réaliser cela, il me fallait néanmoins un outil supplémentaire me permettant de charger (on dit aussi "stresser") la CPU de manière précise. J'ai utilisé pour cela deux autres outils.
Pour charger la CPU à 100%, j'ai utilisé l'outil Prime95 qui réalise un calcul mathématique pour rechercher des nombres premiers.
Après plusieurs recherches sur Internet j'ai finalement choisi pour charger la CPU à 50%, l'outil CPU Speed Adjuster qui permet d'indiquer via un curseur la charge souhaitée.
Seule contrainte: l'outil qui est assez ancien ne charge pas les deux Core de ma machine (équipée d'un processeur Intel Core Duo). La consommation globale de la CPU est donc la moitié de celle qui est réellement indiquée par le curseur. Il faut donc mettre le curseur à 100% pour avoir 50% d'utilisation...
Une fois l'outillage mis en place, voici le scénario que j'ai déroulé:
La courbe ci-dessous donne les résultats du test. Pour simplifier la lecture j'ai superposé les deux courbes (CPU en rouge, consommation électrique en bleu).
Voilà les quelques observations que l'on peut faire:
Conclusion
L'expérimentation décrite ici n'a pas valeur de démonstration mais elle permet de concrétiser l'hypothèse que les performances des applications que nous utilisons ont un impact direct sur la consommation énergétique de notre poste de travail. C'est même un élément non négligeable qui peut entrainer des variations de 30 à 100% de la consommation électrique.
Peut-on aller au-delà de ce constat est mettre en place un plan d'action pour optimiser des applications ?
L'optimisation des applications doit être une problématique constante des développeurs, d'abord pour satisfaire les besoins de réactivité des utilisateurs mais aussi pour limiter les ressources que ce soit la mémoire, la puissance machine ou, comme c'est le cas ici, la consommation électrique.
La question est plutôt de savoir s'il existe des méthodes ou des "Green Pattern" de développements spécifiques pour limiter la consommation électrique et là-dessus, il y a peu de sources aujourd'hui. Il sera donc intéressant d'étudier les résultats du Green Challenge organisé par GreenIT.fr et l'Université du SI pendant lequel une quinzaine d'équipes de développeurs s'affronteront pour limiter la consommation d'une même application.
L'optimisation énergétique des applications est en tout cas un vrai sujet.