L'éco-responsabilité en informatique

Publié dans : Blog

Derrière le terme très politique de “éco-responsabilité” se cachent de nombreuses ramifications, et je vais m’intéresser aujourd’hui à celles qui concernent spécifiquement l’informatique, et en particulier du point de vue applicatif.

Le coût énergétique du code

Le code informatique a un coût énergétique. On a tendance à l’oublier. Le matériel le plus récent tend vers une efficacité énergétique accrue : un processeur moderne, comparé à un processeur plus ancien doté du même nombre de coeurs et d’une même fréquence, exécutera les instructions qu’on lui donne plus rapidement, mais aussi de façon plus efficiente, en consommant moins d’énergie. Quand on achète du matériel moderne, on fait un geste éco-responsable1, mais on peut mieux faire. C’est facile de faire des économies d’énergie en achetant du matériel récent, mais il est possible d’aller beaucoup plus loin avec des logiciels et des comportements éco-responsables. Cela prend tout son sens lorsque l’on est soi-même développeur.

Il est possible de chiffrer ce coût énergétique. Ce n’est peut-être pas à la portée de tout le monde, mais avec le matériel adéquat, on peut facilement l’évaluer. Il suffit de mesurer la consommation de la machine sur laquelle on fait le test, avec et sans l’application qu’on veut tester, et faire la différence. C’est ainsi que j’ai appris que MariaDB consomme plus d’énergie que PostgreSQL, que nginx consomme plus que Caddy, etc.

Du coup, puisqu’il existe une différence substancielle et mesurable, entre différentes applications qui effectuent le même type de tâches, on peut pousser l’idée un peu plus loin en tant que développeur, et se demander : “Combien d’énergie consomme le code que je produis ?”

On peut avoir des surprises, et pas que des bonnes… surtout que cette consommation dépend de facteurs divers.

Le coût énergétique du réseau

Car, pour peu que l’application considérée effectue des opérations sur le réseau, la consommation indirecte de cette application peut rapidement grimper en flèche. Une consommation qui ne se verra pas en consultant la consommation immédiate de la machine sur laquelle tourne l’application, puisqu’il faut aussi prendre en considération l’activité du point d’accès sans-fil, du switch, du routeur, du modem, bref, de toute l’infrastructure réseau, non seulement du point de vue du client (qui initie la connexion) mais aussi du point de vue du serveur (qui reçoit la requête).

C’est un exemple très personnel et peut-être pas représentatif de la majorité des cas d’usage, mais lors d’accès réseaux intensifs, la consommation électrique de mon réseau informatique dans sa globalité peut facilement passer du simple au double. C’est notamment le cas pendant les mises à jour des images docker employées sur mes serveurs : je passe d’une consommation globale de 36W en moyenne à parfois près de 80W1.

Développer éco-responsable

Si vous êtes développeur et que :

  • vous vous souciez de l’optimisation extrême de votre code,
  • vous n’implémentez que les fonctionnalités nécessaires et évitez de réinventer la roue,
  • vous vous assurez de suivre les bonnes pratiques de réutilisation du code, sa simplification, sa compartimentation,
  • vous surveillez régulièrement les ressources systèmes consommées par votre application,

vous êtes déjà éco-responsable ! Dans le cas contraire, il va falloir reprendre les bases. Dans tous les cas, il y a quelques pistes à explorer, quelques situations à prévoir.

Par exemple, il est possible qu’à l’avenir, les applications se voient catégorisées par une étiquette-énergie, exactement comme tout matériel électrique actuellement vendu en Europe. Être capable de développer des applications efficientes devrait déjà être un critère de choix pour les entreprises, si elles veulent être prêtes le jour où cela arrivera : dans une société dont la demande énergétique est en constante hausse et où la production peine à suivre à cause de la raréfaction du nucléaire, se présenter comme une entreprise dont les logiciels sont efficients sera aussi important pour les clients et prospects que d’annoncer vendre des produits issus de matériaux recyclables.

Dans l’absolu, on a amélioré les technologies pour pouvoir faire plus de choses. Le débit des connexions Internet a explosé grâce à la fibre optique et la 4/5G, les processeurs sont de plus en plus puissants tout en étant plus économes en énergie, le cloud permet de déplacer l’exécution de code à l’extérieur du réseau, etc. En somme, on a amélioré la qualité de vie des faignants et des producteurs de spam. Tant de technologies déployés pour afficher des publicités plus vite qu’avant ? Pour être pistés plus rapidement qu’avant ? L’éco-responsabilité passera forcément par l’abandon de ces pratiques, dont le coût énergétique n’est jamais pris en charge par leur producteur et toujours par le client. Une pratique commerciale abominable du début à la fin, à laquelle de nombreux développeurs ont participé. Une pratique qui doit cesser. Si on dispose de meilleures technologies, il faut aussi en faire un meilleur usage.

Des usages éco-irresponsables

Malheureusement, les applications les plus populaires sont loin d’être des références en matière de consommation énergétique. Pas forcément parce qu’elles sont mal conçues, ou parce qu’elles intègrent des algorithmes complexes pour déterminer quelles publicités vous afficher à vous spécifiquement (…), mais aussi parce qu’elles n’optimisent pas ce qu’elles font. Je pense en particulier aux applications de vidéo-conférence, propulsées sur le devant de la scène par la série de confinements connue entre 2019 et 2021. Le coût énergétique de la vidéo-conférence est prohibitif, et totalement inconnu ou ignoré des participants qui n’ont qu’un seul objectif : communiquer. Il y a pourtant de nombreux paramètres à prendre en compte :

  • l’équipement informatique requis pour faire de la vidéo-conférence : ordinateurs, écrans, webcams, micros, et bien sûr, l’infrastructure réseau entre les différentes machines
  • les logiciels employés et leur paramétrage, y compris le système d’exploitation (un mode sombre consomme moins d’énergie qu’un mode clair), les réglages du matériel (baisser la luminosité des écrans permet de gagner quelques watts)
  • la distance entre les différents ordinateurs
  • etc.

Le matériel est de plus en plus efficient en énergie. Mais ce n’est pas encore le cas des applications où il reste beaucoup de travail à faire. Et ce n’est pas encore suffisant : comme certains gestes ont dû être appris au cours de ces dernières décennies, comme le tri sélectif, éteindre le robinet pendant qu’on se brosse les dents, etc., il faudra apprendre à mieux utiliser son informatique. Est-ce qu’une vidéo-conférence est réellement nécessaire ? Cette réunion ne peut-elle pas être réalisée uniquement en audio ? Et du point de vue du développeur : est-ce que j’ai réellement besoin d’un accès réseau pour effectuer telle ou telle opération ?

Les travers du cloud

Le cloud, comme dirait la FSF, c’est stocker ses données sur un ordinateur qui ne nous appartient pas. Quand vous installez une application sur votre téléphone portable, posez-vous la question : est-ce que cette application m’apporte une plus-value par rapport à visiter directement le site depuis mon navigateur ? En général, la réponse est soit “non”, soit une mauvais réponse, telle que : “oui parce que c’est mieux intégré à mon téléphone”. En réalité, cela dépend de ce que fait l’application par rapport au site, et surtout comment elle le fait. Si l’essentiel du travail est effectué sur votre téléphone, tant mieux, mais si de multiples échanges avec le serveur sont nécessaires, c’est là que la consommation explose.

Comment le vérifier ? Par aucun moyen simple à l’heure actuelle. Soit l’application est sous licence libre, auquel cas vous pouvez consulter le code source pour voir si l’application est bien écrite, soit elle est sous licence propriétaire et il faut utiliser des outils appropriés pour évaluer la quantité et la qualité de ses accès réseau. Une tâche impossible pour le commun des mortels, et fastidieuse à réaliser quand on maitrise le sujet, considérant la quantité d’applications à tester. J’aimerais bien voir, sur mon téléphone, en plus de la consommation en “data” d’une application donnée, sa consommation électrique estimée. On aurait sans doute des informations intéressantes, et cela inciterait sûrement à la production d’applications de meilleure qualité…

En outre, stocker ses documents dans le cloud est très consommateur d’énergie, puisqu’on parle souvent de fichiers de plusieurs méga-octets. Une photo de bonne résolution, prise avec votre téléphone portable, pèse en moyenne 5Mo à 10Mo. Mes photos prises avec mon APN en RAW peuvent peser 50Mo. Les fonds d’écrans, sonneries, pièces jointes d’email, musiques, vidéos, etc. vont transiter sur le réseau, et utiliser de l’énergie. L’énergie de votre téléphone, de l’antenne du réseau mobile, du datacenter où seront stockées ces données, etc.

Auto-héberger tout cela est éco-responsable, en limitant cette consommation d’énergie à votre propre infrastructure. Si vous êtes une entreprise, et du seul point de vue de l’énergie, cela vous reviendra moins cher que payer un intermédiaire qui répercutera ces coûts sur votre facture, avec une marge.

Avec le cloud, on multiplie le coût énergétique de chaque opération réseau. Donc, en tant que développeur, demandez-vous, à chaque ligne de code créée qui envoie une requête à un serveur distant, si cette ligne est parfaitement optimisée et ne surchargera pas le serveur en question. Exemple tout bête : arrêtez de faire des pages HTML où vous déclarez 50 fichiers javascript et 50 feuilles de styles : concaténez. Ce n’est pas parce que HTTP/2 permet de faire des requêtes en parallèle qu’il faut en abuser…

Les bénéfices de l’éco-responsabilité

Évidemment, il y a le gain environnemental. Moins de consommation d’énergie signifie moins d’émissions de CO2. Il y a également le coût financier : l’énergie est chère, et le sera de plus en plus si on continue à scier la branche sur laquelle on est assis en “sortant du nucléaire”.

Mais de façon plus pragmatique, être éco-responsable en informatique signifie aussi augmenter le délais entre deux charges de batterie de téléphone ou d’ordinateur portable, réduire la charge système et donc disposer d’un périphérique plus agréable à utiliser, peut-être au point de devoir le remplacer moins souvent, d’où encore plus d’économies et… une meilleure éco-responsabilité.

Les gains côté développeur ne sont pas moins intéressants : être éco-responsable signifie moins de code à maintenir, un code plus efficace, plus facile à analyser, à relire, donc plus de temps pour créer de nouvelles fonctionnalités et moins de temps à débugguer, donc moins de bugs et plus vite corrigés, donc clients satisfaits, employeur satisfait, meilleure qualité de vie au travail, licornes et arcs-en-ciel.


  1. À charge logicielle équivalente. En réalité, il faut tenir compte d’autres facteurs pour que ce geste soit réellement éco-responsable, comme l’âge du matériel remplacé, les matériaux employés (recyclables ou non), etc. ↩︎