Sans équivoque, les activités humaines sont responsables du réchauffement climatique. Le secteur du numérique n’est pas en reste. Selon l’IEA (International energy agency, les centres de données (où sont hébergés les serveurs faisant fonctionner nos applications) et la transmission de données sur le réseau seraient responsable de près de 1% des émissions de gaz à effets de serre liées à l’énergie (0.6% des émissions de gaz à effet de serre mondial).

Chez Davidson consulting nous sommes convaincus que pour améliorer l’efficience de nos applications, il est nécessaire d’être en mesure de quantifier leurs performances.

C’est pourquoi dans cet article, nous allons aborder quelques outils pour vous permettre de mesurer l’impact énergétique des services numériques que vous développez.

Mesurer la consommation énergétique de ses logiciels

Approche avec Wattmètre physique

La première option pour mesurer le coût énergétique d’un logiciel est d’employer un wattmètre pour mesurer la consommation du serveur sur lequel il est physiquement branché (à la prise électrique murale). Ces appareils, relativement peu coûteux permettent de mesurer la puissance (en Watt) d’un appareil électrique, et donc d’en déduire sa consommation énergétique en Wh (watt-heure).

  • Rappel : les Watts définissent la puissance instantanée nécessaire à une machine pour fonctionner, quand les Wh définissent l’énergie consommée sur un intervalle de temps.

Les wattmètres physiques offrent l’avantage d’avoir une bonne précision et de permettre de mesurer la consommation totale du serveur. Ils ne permettent cependant pas d’isoler la consommation d’un composant (par exemple le processeur) ou d’une application particulière car c’est celle de tout le serveur qui est mesurée.

Approche avec “Wattmètre logiciel” : vJoule

Si vous ne souhaitez pas utiliser une solution matérielle, des solutions “logicielles” existent. Ces outils permettent de mesurer la consommation énergétique des logiciels en cours d’exécution sans devoir acheter et installer un wattmètre physique. Nous allons présenter aujourd’hui un wattmètre logiciel développé chez Davidson, nommé vJoule. En se basant sur des informations collectées directement sur le processeur, vJoule permet d’estimer la consommation énergétique de vos logiciels sans avoir besoin d’avoir recours à un appareil de mesure externe. Cette approche est inspirée de l’approche choisie par PowerAPI (développé par l’équipe Inria Spirals), auquel Davidson contribue au sein du dispositif InriaSoft. Comme dit précédemment, les wattmètres physiques présentent l’inconvénient de mesurer la consommation énergétique à l’échelle de la machine et ne permettent pas d’isoler la consommation de composants spécifiques (processeur, mémoire, disque, carte réseau, etc.). En étudiant les différents programmes en fonctionnement et par des clés de répartition simples vJoule offre une mesure à la granularité qui nous intéresse : le logiciel !

Sous le capot de vJoule

Architecture

vJoule possède deux types de composants :

  • Sensor : déployé sur le serveur exécutant les logiciels à mesurer. Les sensors sont des plugins logiciels récupérant les informations dites de bas niveau de la machine, à savoir la consommation énergétique des différentes composantes du serveur. Il peut y avoir différents types de sensors pour récupérer différents types de consommation, par exemple un sensor pour récupérer la consommation du processeur, et un autre plugin sensor pour récupérer la consommation de la carte graphique. Dans la version actuelle de vJoule, deux plugins sensors sont disponible, RAPL et nvidia. Ces plugins seront présentés plus en détails par la suite.
  • Core : se basant sur les informations remontées par les sensors, le core répartit la consommation de la machine sur les différents logiciels supervisés. Cette répartition se fait à partir d’un modèle très simple basé sur les compteurs de performances des applications. Les résultats peuvent ensuite être récupérés et exportés de différentes manières, par exemple sur un tableau de bord Grafana pour pouvoir être analysés.

vJoule et ses composants

Ensemble, ces composants permettent à vJoule d’estimer la consommation énergétique d’un programme à partir de deux informations clés : la consommation de la machine (via RAPL et nvidia) et la charge de ce programme sur la machine (via les compteurs de performance).

Accéder à la consommation de son ordinateur avec RAPL

vJoule se base sur RAPL pour récupérer la consommation énergétique du processeur et de la RAM de la machine utilisée pour l’expérimentation. RAPL (Running Average Power Limit) est une fonctionnalité présente sur la majorité des processeurs Intel de générations récentes (après 2011), et quelques processeurs AMD de générations au moins aussi récentes. RAPL permet de d’obtenir les données liées à l’accumulation d’énergie consommée par les différentes composantes du processeur depuis le démarrage de la machine. Cette information peut être récupérée facilement sur Linux depuis le système de fichier ou via les compteurs de performance. vJoule utilise cette seconde option.

En pratique l’implémentation de RAPL peux varier d’un processeur à l’autre et être plus ou moins précise. Sur les processeurs très récents RAPL se base sur des informations physiques et peut donc s’apparenter à un wattmètre physique branché directement sur le processeur, ce qui lui permet d’avoir une estimation très précise de la consommation réelle. Il a été montré par la communauté scientifique que RAPL est très fiable et fourni des consommations sur lesquels on peut s’appuyer sans crainte (cf. A Comparative Study of Methods for Measurement of Energy of Computing, Fahad, Muhammad et al. 2019).

Certains processeurs implémentent également une interface RAPL pour récupérer la consommation de la RAM et du GPU intégré.

A noter : si vJoule est capable de récupérer la consommation du GPU intégré, il n’est pas possible de déterminer quel programme est à l’origine de la consommation.

Compteurs de performance

vJoule utilise les compteurs de performances pour répartir la consommation de la RAM entre les différents programmes lorsque celle-ci est disponible.

Un compteur de performance est une interface hardware (registre physique sur le processeur), permettant d’obtenir des informations sur le comportement des applications. Par exemple, les compteurs de performance peuvent servir à compter le nombre d’instructions exécutées par un programme, ou bien le nombre de cache miss (accès à la mémoire RAM) effectués.

vJoule utilise ces compteurs de performance pour déterminer les programmes qui consomment le plus de ressources sur la machine, afin de pouvoir créer une clé de répartition de la consommation retournée par les plugins sensor vers la consommation des applications.

Nvidia

vJoule implémente un plugin nvidia pour récupérer la consommation d’énergie des cartes graphiques nvidia. Cette acquisition se fait via l’interface nvml (Nvidia Management Library) fourni par nvidia, qui permet de récupérer la puissance courante utilisée par la carte graphique. Grâce à cette puissance il est possible de créer une estimation de la consommation d’énergie de la carte graphique.

Certains modèles de carte graphique permettent de récupérer le pourcentage d’utilisation de la carte par les différents programmes. Ce pourcentage est utilisé par vJoule pour répartir la consommation d’énergie de la carte sur les différents programmes. A noter : il existe quelques limitations à cette répartition car cette possibilité repose sur le principe de GPU virtualisé, qui n’est utilisable que pour certains types de tâches (3D, encodage et décodage).

 

Une petite démo ?

Nous allons présenter l’utilisation de vJoule à travers une petite démo simple.

Installation

vJoule peut être installé sur un système linux directement via les packages mis à disposition sur son dépôt Github : https://github.com/davidson-consulting/vJoule.

La dernière version de vJoule embarque deux composants : un service vjoule_service et un outil en ligne de commande vjoule. Cet outil est pratique pour effectuer des mesures simplement. Le service, lui, peut être intégré directement dans des programmes.

Visualiser la consommation de sa machine

Commençons simplement par visualiser la consommation en direct de notre machine. vJoule propose une option permettant cela directement depuis le terminal. Exécuter vjoule top affichera ce résultat:

vJoule top

Nous pouvons voir ici en direct la consommation du processeur, de la mémoire et de la carte graphique de notre ordinateur. Au-dessus, nous avons aussi la consommation de deux programmes : le service vjoule et la commande vjoule top en cours d’exécution !

Mesurer la consommation d’un site WordPress

Complexifions un peu les choses. Nous allons maintenant observer la consommation d’un site WordPress et de sa base de données lors d’un pic de charge.

vJoule permets d’évaluer la consommation de tous types de processus, y compris des conteneurs docker. Nous allons donc nous baser sur l’image docker officielle de WordPress (https://hub.docker.com/_/wordpress) pour l’installer simplement. Via docker compose et les instructions officielles, le lancement de notre site de test se fait en une ligne de commande !

Pour générer de la charge, nous allons utiliser Vegeta (https://github.com/tsenart/vegeta), un utilitaire permettant d’effectuer des tests simples de montée en charge pour des services webs. Il sera parfait pour tester notre WordPress.

Une fois configuré, le service de vJoule se met à évaluer en continue la consommation énergétique de notre ordinateur ainsi que de nos deux conteneurs docker (WordPress et MySQL). La dernière estimation, en Joules, est stockée dans un fichier de résultat. Le dépôt github de vJoule inclut un script python permettant de collecter ces résultats en continu et de les afficher. Voici un exemple de courbe de consommation de notre site web lors d’un pic de charge généré par Vegeta.

Courbe de consommation

Comme nous le voyons ici, vJoule peut être intégré dans des scripts utilisés pour évaluer les performances énergétiques de nos logiciels dans divers scénarios. Il faut cependant noter que ces chiffres sont spécifiques à la machine sur laquelle notre application est déployée. Sur une autre, les résultats auraient été différents.

Consortium PowerAPI / Chez Davidson

En complément de ses travaux de R&D interne et collaboratifs, Davidson fait partie du consortium Inriasoft PowerAPI. PowerAPI est une solution de wattmètre logiciel (comme vJoule présenté ici), initialement développé comme un prototype de recherche par l’équipe Inria Spirals. Avec OVHCloud, Orange et Inria, ce consortium vise à industrialiser PowerAPI. L’objectif est d’améliorer ses performances, sa fiabilité et son utilisabilité. PowerAPI, comme vJoule, sont des briques de bases nécessaires utilisées dans de plus larges projets d’études de l’empreinte énergétique des logiciels. Chez Davidson, nous les utilisons par exemple pour mieux comprendre comment améliorer les performances des applications dites Cloud Native dans le cadre du projet collaboratif Distiller (voir notre précédent article sur le sujet).

Perspectives

Si des outils comme vJoule ou PowerAPI sont des briques essentielles pour mesurer les performances énergétiques de nos applications, il ne faut pas négliger les protocoles expérimentaux mis en place pour étudier leur empreinte énergétique. Nous verrons dans un prochain article quelques pistes pour mener des campagnes de mesures de performance  plus pertinentes, plus fiables, et ainsi donner un aperçu des travaux menés au sein de l’équipe R&D.

Auteurs :

Emile Cadorel & Dimitri Saingre – Chargés de recherche right tech chez Davidson