Techdays'09 : Le développement logiciel peut lui aussi être vert
Oui, il est possible de réduire la consommation électrique en étant plus attentif lors de l'écriture des applications. C'est ainsi qu'Eric Mittelette, responsable du groupe développeurs de la division plateforme d'entreprise chez Microsoft France, a entamé sa session « développement d'applications vertes » aux Techdays'09 de Microsoft qui se sont tenus la semaine dernière à Paris. Tenant davantage du credo que de la méthode, sa déclaration était néanmoins inspirée par plusieurs expériences de développement réalisées wattmètre en main. Plus que de grandes leçons d'algorithmique et de programmation, il a fourni des pistes pour une programmation plus raisonnable.
Ainsi le responsable Microsoft donne un premier conseil aux futurs développeurs verts : se munir d'un wattmètre pour mesurer la consommation des différentes versions de logiciel qu'ils écriront. « Sans mesure on ne peut rien faire », assène-t-il. Il suffit de brancher son PC sur l'appareil de mesure et de jauger la consommation des différentes versions de programmes en exécution. Equipé de la sorte, le développeur dispose aussi de plusieurs outils fournis par l'éditeur pour étudier la consommation des logiciels. Ainsi, dans Seven, l'utilitaire Xperf lance, en ligne de commande, un diagnostic de la consommation du système. Une fois arrêté, il génère un fichier d'informations concernant directement le noyau. Il indique par exemple les points chauds au niveau du processeur ou de l'activité du disque, etc. Powercfg, lui, crée un rapport appelé energy-report qui liste tous les problèmes de consommation identifiés au niveau de la machine et de son système. « On voit que le périphérique USB n'est pas entré en veille quand on l'a demandé, par exemple, indique Eric Vernié, chargé de la relation technique avec les développeurs. Ce document peut aussi signaler que la batterie est en mauvais état. »
La parallèlisation n'est pas toujours une solution
Wattmètre branché sur un portable, les deux responsables Microsoft ont procédé à plusieurs démonstrations de l'impact de certains changements au sein du code sur la consommation énergétique. Ainsi, Vista seul consomme 40 watts. Mais l'affichage d'une fractale de Mandelbrot, image issue d'un algorithme mathématique, fait monter le compteur jusqu'à 51 watts. En parallèlisant le programme pour un fonctionnement sur deux coeurs, la consommation descend à 43 watts en moyenne mais avec un pic à 56. Sur 6 coeurs, le même type de phénomène se produit. Conclusion : il est essentiel d'arbitrer entre exécution rapide et consommation.
Moins compliquées, certaines astuces limiteront la gourmandise des programmes. L'utilisation de la fonction P-invoke dans .Net permet, par exemple, lorsqu'on débranche un portable du secteur et qu'il ne fonctionne plus que sur sa batterie, d'arrêter d'éventuelles animations en cours pour économiser l'énergie. On doit aussi préférer un accès direct à la mémoire plutôt qu'une copie d'objets. Enfin, pourquoi faire appel à une fonction mathématique telle que la racine carrée dans une bibliothèque idoine, alors qu'on peut l'écrire simplement en ligne ? Là -encore, la preuve fut faite par le tout puissant wattmètre.
Pour économiser, le code doit aussi savoir gérer les diverses fonctions de mise en veille et de reprise ainsi que les transitions entre les deux états. Il doit résister aux défaillances logicielles, pour éviter la surconsommation d'un redémarrage entre autres. Eric Mittelette évoque par exemple la redondance de services ou de modules comme on la voit apparaître dans Live Mesh. Si un élément crashe, l'ensemble du logiciel retrouve néanmoins 'son chemin' au travers des services restants.
Une question d'équilibre
[[page]]
Pour Eric Mittelette, il faut un état d'esprit particulier pour développer plus vert. Dès le départ, on doit comprendre l'impact du logiciel sur la consommation énergétique et limiter l'utilisation des ressources en conséquence. Il faut écrire un code souple, adaptable, pensé, capable de monter en puissance, avec des couches d'abstraction au-dessus des données, etc. Quoique... Encore une fois, pour être manipulées, toutes ces clés requièrent un grand sens de l'équilibre. Ainsi, trop de couches d'abstraction des données vont utiliser un grand nombre de ressources et, au final, nuire à l'efficacité énergétique. La parallélisation du code a, elle aussi, ses limites. La surcharge entraînée par la gestion d'un code réparti sur plusieurs processeurs ou coeurs consomme de la ressource et va finalement nuire aux économies faites en exploitant au mieux la plateforme processeur comme l'expliquait le Gartner dans une de ses études récentes. Enfin, on a souvent le choix entre consommer un peu plus mais moins longtemps ou consommer moins sur une durée plus longue.
Un peu de bon sens ? Eric Mittelette énonce quelques vérités qu'il fallait sans doute rappeler. Il faut ainsi utiliser les ressources adaptées à ce que l'on développe et ne pas écrire une calculette sur 24 coeurs... Il faut parfois prendre le relais du système d'exploitation sur la consommation énergétique. Le responsable Microsoft évoque l'exemple des applications kiosques. Installées dans les magasins, elles restent parfois ouvertes sur des images plein écran toute la journée. Dans ce cas, l'OS les alimente en permanence pour ce type de besoin. Il est intéressant d'imaginer un écran d'accueil allégé en cas de non utilisation prolongée. Parmi les conseils plus pointus, Microsoft rappelle que le timer de l'OS, qui lui permet de garder le contrôle, se déclenche entre 15 et 18 ns. Si une application déclenche un timer en dessous de ce délai, l'OS s'adapte et pour ce faire, il utilise les ressources processeurs à plein. Toujours au niveau du système, plutôt que de laisser tourner le « file system watcher » qui observe en permanence ce qui se passe au niveau du gestionnaire de fichier uniquement pour guetter un type d'événement, mieux vaut s'abonner à cet événement. Il s'agit à la fois de limiter les cycles CPU et de maîtriser les entrées/sorties (en jouant avec les caches par exemple).
Un appel à la bonne volonté de tous les développeurs, sous Windows ou non
Eric Mittelette rappelle qu'avec un portable, 8% de la consommation électrique provient du disque dur. Quant aux disques SSD, réputés moins gourmands puisqu'ils ne 'tournent' pas, Microsoft rappelle néanmoins qu'ils ne s'arrêtent jamais. Limiter les animations, faire attention aux couleurs. Sur les écrans classiques et avec les écrans à Led rétroéclairées, le blanc est plus consommateur que le noir (pour lequel on n'allume pas les pixels).
Pour conclure, Eric Mittelette en appelle à la bonne volonté des développeurs qu'il invite à se doter du fameux wattmètre et à se mettre au travail. « Nous allons créer un forum, un blog, un site pour partager les bonnes pratiques du développement vert. Et que vous travailliez sur Windows, sur Linux, ou un autre OS, cela nous est égal. C'est dans l'intérêt global. »