Quantcast

GreenIT

Mercredi 28 juillet 2010 3 28 /07 /Juil /2010 17:10

 

 

J'avais la chance cette année d'être membre du jury du Green Challenge coorganisé par l'USI 2010 et par GreenIT.fr . Ce Challenge, qui a réuni une quinzaine d'équipes de développeurs d'avril à juin 2010, avait pour objectif d'identifier des "greens patterns" de développement, c'est-à-dire des bonnes pratiques logicielles pour réduire la consommation énergétique d'une application. Dans un précédent article de ce blog, j'expliquais à quel point la CPU pouvait avoir un impact sur la consommation énergétique des applications, ce challenge montre comment les développeurs peuvent agir concrètement pour la réduire. A découvrir ci-dessous.

 

 

Rappel du périmètre du Challenge

Pour identifier les "greens patterns", le challenge proposait de faire baisser la consommation sur un exemple d'application: QRDecode. L'objectif de l'application QRDecode est de décoder des codes barre à deux dimensions (des "QR Codes"), d'afficher les coordonnées des contacts auxquels correspondent ces codes barres et de positionner ces contacts sur une carte. Une implémentation de référence était proposée, en voici une capture d'écran.

 

7avoir greenc1

 

Schématiquement, si l'on se limite aux flux, le rôle de cette application est de transformer plusieurs dizaines de QR Codes représentés par des fichiers .QRC transmis à l'application en:

  • - Des cartes de visites,
  • - Des images (la représentation visuelle du QR Code),
  • - Des coordonnées GPS,
  • - Une carte affichant ces coordonnées.

 

7avoir greenc2

 

 

 

Les différentes fonctionnalités de l'application QR Decode sont donc:

  1. 1) Le décodage des fichiers QR Code en une représentation carte de visite (en l'occurrence VCard),
  2. 2) La transformation des QR Codes en images,
  3. 3) La géolocalisation des adresses contenues dans les VCard pour obtenir des coordonnées GPS,
  4. 4) Le positionnement des points GPS sur une carte graphique,
  5. 5) L'affichage des cartes de visites et de la carte graphique.

 

 

 

L'implémentation de référence de l'application QR Decode a été réalisée en Java et se décompose en deux parties: une partie serveur qui s'exécute sur Google App Engine et une partie client qui s'exécute sur le navigateur. Les deux parties de l'application sont instrumentées pour récupérer le temps CPU consommé. Pour la partie serveur cela se réalise via des APIs spécifiques fournis avec le projet, pour la partie client cela se réalise par l'intermédiaire d'un plug-in FireFox développé pour l'occasion, GreenFox.

 

7avoir greenc3

 

 

Les équipes étaient jugées en fonction de la réduction de la consommation qu'elles apportaient à l'application de référence. Les paragraphes suivant décrivent les méthodes mises en œuvre par les différents participants.

 

 

Répartition des traitements

La bonne répartition des traitements entre le serveur et le client est un des éléments majeurs d'optimisation des performances énergétiques de l'application. En effet, le code qui s'exécute côté serveur chez Google dispose de conditions énergétiques idéales (une plateforme hautement mutualisée, un PUE optimisé) alors que le code qui s'exécute sur la machine cliente, même dans les conditions minimales que nous avions choisi (un netbook de type Asus EeePC) reste celui d'un PC individuel avec une importante déperdition d'énergie.

 

Dans l'implémentation de référence, les traitements se répartissaient comme suit:

 

 

7avoir greenc4

 

 

La première optimisation consistait donc à décaler le plus possible de traitements côté serveur. Voici la répartition "idéale" proposée par les deux premières équipes sur le podium.

 

7avoir greenc5

 

 

La géolocalisation est effectuée par appel d'un traitement Google. Néanmoins le fait de le réaliser via un appel Javascript et nettement plus couteux que lorsqu'il est intégré dans le code serveur. De plus, il est effectué pour chaque adresse ce qui est pénalisant. Une optimisation consiste à réaliser un appel batch sur le serveur pour réaliser la totalité du traitement en un seul appel. C'est possible via l'API Google mais cela impose des limites en nombre de requêtes lancées, un des gagnants a donc choisi d'utiliser MapQuest à la place.

 

7avoir greenc6

 

 

 

Le positionnement des points sur la carte est également réalisé dans l'application de référence par l'API Javascript de GoogleMap. C'est encore une fois très couteux en CPU. Deux stratégies ont été utilisées pour éviter cet écueil. Dans les deux cas il s'agissait de supprimer les appels JavaScript. La première stratégie consiste à réaliser une génération complète sur le serveur, cela est possible en utilisant la version statique de Google Map qui génère une seule image intégrant la carte et tous les points.

 

7avoir greenc7

 

 

Une autre stratégie était l'utilisation d'un Canvas HTML 5 dans la page avec un positionnement des points en relatif sur un simple fond de carte.

 

7avoir greenc8

 

 

Dans les deux cas cela limite les fonctionnalités de l'application ce qui était autorisé par le règlement.

 

L'affichage se fait dans le navigateur et est donc obligatoirement côté client. Néanmoins, la plupart des candidats ont choisi d'alléger les traitements d'affichage en préparant le travail côté serveur. Ainsi, deux des équipes gagnantes ont directement encodées les images dans la page HTML (soit en base64 soit en passant par le data URI Scheme). Voir l'exemple ci-dessous.

 

<img height="50" width="50" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5AQAAAACkY74oAAACDElEQVR42gEBAv79AP////////+AAP////////+AAP////////+AAP////////+AAPAYd7eONAeAAPfbqk9pxfeAAPRQfik95ReAAPRUm7PMLReAAPRXuYGD/ReAAPfVRdy43feAAPAVVVVVVAeAAP/0Zp05D/+AAPQawgCpNB+AAPPkxdcGbK+AAP4JncYKlFeAAPNm7P7VX3eAAPTBYYKMZ9+AAPm+0JffuReAAPWb9RElkEeAAPl0j/6V3X+AAPpDjnDKRfeAAPP21YMOLO+AAP/ZrsBga3eAAPp1YvR7JH+AAPedkyWKfbeAAPjzIuJHeQ+AAPIDg0C3cCeAAPRxGt1LRz+AAPJXDZTvJU+AAPJwKt0HZ3+AAPsE9cBTgDeAAPdmSEZypH+AAPRNEJWpD5+AAPfwhKWPv/eAAPfFOPoUyOeAAP5v84t9lfeAAP/SZk6KAX+AAP4j66af7u+AAPyOyI79UNeAAPy0CyhjnW+AAPfd4mu5JyeAAPonjJeeab+AAPuASpOR/aeAAPjynbVmw6eAAPHMC4C7IEeAAP/zpNxW92+AAPAaVJQ/FXeAAPfS5pxXZ3eAAPRSTcGqIA+AAPRQHJKPv6eAAPRV9gPpnN+AAPfY+dJQcPeAAPATFiaedyeAAP////////+AAP////////+AAP////////+AAP////////+Ab4EaBY4WFZcAAAAASUVORK5CYII=" class="flashcode">

 

L'affichage HTML des cartes de visites a également été généré côté serveur ce qui permet d'éliminer le JavaScript qui génère le code HTML à partir de la représentation mémoire/JSON des données.

 

 

 

 

 

Optimisation des traitements

La plupart des équipes ont également travaillés sur l'optimisation des traitements côté serveur. Dans un premier temps, l'idée était d'effectuer un profiling de l'application afin d'identifier les lignes de code sur lequel le processeur passe le plus de temps. Plusieurs outils Java ont été utilisés pour cela: Netbeans Profiler, Java VisualVM ou JavaProfiler.

 

7avoir greenc9

 

 

 

Voici les différentes optimisations réalisées:

 

Décodage

Le traitement de décodage des QR Code est clairement le traitement le plus coûteux en temps processeur sur la partie serveur.

Dans l'implémentation de référence, le traitement s'appuyait sur la librairie Open Source de Yusuke Yanbe.

 

 

7avoir greencA

 

 

Deux des équipes sur le podium ont fait le choix de chercher et de benchmarker une autre librairie. Ils se sont donc appuyés sur la librairie Zebra Crossing qui offre plus de fonctionnalités (support d'un plus grand nombre de type de code barre) et qui est surtout beaucoup plus performante que la librairie de départ.

 

7avoir greencB

 

 

Une autre stratégie, plus complexe, consistait à optimiser la librairie existante. Pour cela un profiling plus fin et des optimisations sur le code Java ont été mises en œuvres. En particulier:

  • - Eviter les copies de blocs mémoires (voir exemple de code ci-dessous),
  • - Limiter le nombre d'objets à instancier et favoriser la réutilisation des instances,
  • - Passer en variable Static des tableaux de valeurs,
  • - Limiter les conversions de types,
  • - Limiter l'utilisation d'objet nécessitant de la synchronisation (ThreadSafe).

A noter que l'objectif de ces optimisations n'est pas de limiter l'usage mémoire (peu impactant énergétiquement) mais de limiter le nombre d'opérations pour alléger la CPU.

 

int[][] imageToIntArray(QRCodeImage image) {

int width = image.getWidth();

int height = image.getHeight();

int[][] intImage = new int[width][height];

for (int y = 0; y < height; y++) {

for (int x = 0; x < width; x++) {

intImage[x][y] = image.getPixel(x, y);

}

}

return intImage;

}

 

 

Génération image

Un autre traitement coûteux était la génération de l'image graphique du QR Code à partir de l'adresse.

 

Une implémentation était fournie dans l'application de référence. Deux équipes ont fait le choix de la substituer par un appel à une API GoogleChart qui propose cette fonctionnalité. Cela permet en un simple appel HTTP de disposer de l'image.

 

<img height="50" width="50" src="http://chart.apis.google.com/chart?chs=228x228&amp;cht=qr&amp;choe=UTF-8&amp;chl=BEGIN%3AVCARD%0D%0AN%3AChambers%3BJohn+T.%0D%0ATEL%3BCELL%3A%28408%29+526-7209%0D%0AADR%3BWORK%3A%3B%3B170+W.+Tasman+Dr.%3BCA%3BSan+Jose%3B95134%3BUSA%0D%0AORG%3ACisco+Systems%3B%0D%0AEND%3AVCARD" class="logo flashcode">

 

Même si cette option génère une économie énergétique, le jury a pris la décision de pénaliser ces deux équipes car l'appel à ce traitement n'est pas visible à travers nos instruments de mesures et pénalisait donc les autres équipes.

 

La plupart des autres équipes ont réalisés des optimisations sur le code de génération des images. L'optimisation la plus simple était de "rogner" la taille pour éviter le traitement de pixels inutiles.

 

7avoir greencC

 

 

Différentes optimisations ont également étaient réalisées sur le traitement pour éviter de manipuler des pixels de couleurs alors que l'image du QR Code est nécessairement en noir et blanc. Enfin, l'encodage de l'image en bitmap a été privilégié en évitant de passer par les APIs AWT qui sont peu performantes.

 

 

Affichage

L'optimisation de l'affichage consistait d'abord à éviter l'utilisation du JSP qui provoque un overhead surtout au premier chargement. La plupart des équipes ont également pris la décision de construire le code HTML directement en utilisant des StringBuilder (voir exemple ci-dessous).

 

 

public String decode(StringBuilder sbCards, StringBuilder sbAlerts,

StringBuilder sbImages, File file, int id) throws Throwable {

     ...

     // HTML of vcard

     sbCards.append("<li class = \"vcard\">");

 

     // preparing the HTML5 canvas

     sbCards.append("<canvas id=\"canvas");

     sbCards.append(id);

     sbCards.append("\" width=\"");

     sbCards.append(wOut);

     sbCards.append("\" height=\"");

     sbCards.append(hOut);

     sbCards.append("\"></canvas>");

     sbCards.append("<span class=\"name\">");

     sbCards.append(sName);

     sbCards.append("</span>");

     sbCards.append("<span class=\"orga\">");

     sbCards.append(sOrga);

     sbCards.append("</span>");

     sbCards.append("<span class=\"addr\">");

     sbCards.append(sAddress);

     sbCards.append("</span>");

     sbCards.append("</li>'+\r\n'");

     ...

 

La plupart des équipes ont aussi fait en sorte d'éviter les aller/retours qui nécessitent des traitements de connexions côté client et côté serveur. Une des équipes a fusionné dans la page HTML: le code HTML, la feuille CSS, les images et le Javascript pour limiter les échanges à un seul aller/retour.

Le code HTML a été optimisé (suppression des espacements inutiles) par plusieurs équipes. Le code JavaScript a également était optimisé pour limiter le nombre d'appel AJAX qui impliquent des traitements (et donc de la CPU) pour réaliser les connexions. Le JavaScript a aussi été offusqué pour limiter le parsing. La meilleure stratégie était néanmoins d'éviter complétement le JavaScript !

 

 

Autres optimisations

D'autres optimisations ont été mise en œuvre. La principale concerne la gestion des traces et du code de débogage. L'idée étant de réaliser ces traitements de manière conditionnelle pour ne pas consommer du temps d'exécution inutile. Par exemple le code de trace:

 

     canvas.println("Adjust AP(" + x + ","+ y+") to d("+dx+","+dy+")");

 

est remplacé par:

 

     if (canvas.isPrintlnEnabled())

          canvas.println("Adjust AP({},{}) to d({},{})", x, y, dx, dy);

 

Enfin, plusieurs équipes ont mis en œuvre les options de gestion du cache côté navigateur qui peuvent être intéressantes si l'application s'exécute plusieurs fois. Néanmoins le jury partait systématiquement d'un cache vide avant chaque mesure.

 

 

Quels enseignements ?

Le premier enseignement que l'on peut tirer de ce challanger est que l'optimisation énergétique d'une application est une réalité. Les gains obtenus entre l'application de référence et les équipes gagnantes vont de 20% pour la partie serveur à un gain de plus de 600% sur la partie cliente.

 

7avoir greencD

7avoir greencE

 

 

On constate ensuite que les stratégiques gagnantes pour limiter la consommation sont:

  • - Réaliser le maximum de traitements côté serveur quitte à réduire l'ergonomie à l'essentiel côté client,
  • - Profiler l'application pour identifier les traitements fortement consommateur de CPU,
  • - Optimiser ces traitements pour limiter le nombre d'opérations réalisées ou remplacer ces  traitements par des librairies plus efficaces,
  • - Pré-générer les affichages sur le serveur et éviter le code interprété (JavaScript ou JSP).

 

C'est à ce prix que l'on aura des applications plus "green" mais aussi, globalement, de meilleure qualité.

 

Un grand merci à tous les participants qui nous permettent d'appréhender ces bonnes pratiques.

 

Vous pouvez retrouver ici la vidéo de la restitution du Green Challenge au cours de l'USI.

 

 

Par Lionel - Publié dans : GreenIT - Communauté : culture geek
Ecrire un commentaire - Voir les 0 commentaires
Vendredi 11 juin 2010 5 11 /06 /Juin /2010 13:55

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.

 

7avoir volt8

 

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.

 

7avoir volt4

 

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.

 

7avoir volt6

 

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.

 

7avoir volt9

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.

 

7avoir volt7

 

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).

 

7avoir volt1

 

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:

  • - Usage réduit: 10-15% de CPU,
  • - Occupation moyenne: 50% de CPU,
  • - Pleine charge: 100% de CPU.

 

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.

 

7avoir volt3

 

 

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.

 

7avoir voltA

 

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é:

  • - 10 minutes d'usage réduit,
  • - 10 minutes d'usage moyen,
  • - 10 minutes d'usage réduit,
  • - 10 minutes en pleine charge,
  • - 10 minutes d'usage réduit.

 

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).

 

 

7avoir volt2

 

Voilà les quelques observations que l'on peut faire:

 

  • - Les deux graphiques ont cette fois une forme de courbe très proche avec les deux paliers auquel on peut s'attendre vu le scénario.
  • - La consommation électrique est 30% plus élevée en usage moyen qu'en usage réduit (65W contre 50W).
  • - La consommation électrique est presque 2 fois plus élevée en pleine charge qu'en usage réduit (90W contre 50W).
  • - La consommation électrique monte et descend progressivement lors du changement d'état. Cela est probablement du à la montée en puissance du ventilateur (qu'on entend pendant le test) qui permet de maintenir le processeur à une température convenable. D'ailleurs, lors de l'utilisation en pleine charge, la consommation revient à un niveau normal au bout d'un certain temps avant la fin du test, il est possible que cela soit lié à l'atteinte de cette température optimale (à confirmer par d'autres tests).

 

 

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.

Par Lionel - Publié dans : GreenIT - Communauté : culture geek
Ecrire un commentaire - Voir les 2 commentaires
Lundi 23 novembre 2009 1 23 /11 /Nov /2009 09:14

 

Windows 7 propose en standard des fonctionnalités permettant d'optimiser la consommation électrique de l'ordinateur.

 

Ces fonctionnalités concernent à la fois la gestion détaillée et centralisée des options de mise en veille de l'ordinateur mais également la prise en charge de périphériques ayant la capacité à adapter leur consommation en fonction de leur mode de fonctionnement.

 

J'anime actuellement un groupe de travail chez Bouygues sur le GreenIT, il était donc tout naturel que je m'intéresse à ce sujet.

 

 

Piloter

Windows 7 propose dans le panneau de configuration un accès au pilotage des options d'alimentation.

 

 

 

Ce n'est pas tout à fait une nouveauté car ce panneau existait déjà sous Windows Vista (pas sous Windows XP) mais, on va le voir, il offre encore plus de paramétrage ici.

 

Les paramétrages sont regroupés dans des "modes de gestion de l'alimentation". Trois sont proposés en standard: Usage normal, Economie d'énergie ou Performances élevées. Détail anecdotique (mais pas tant que ça), ce dernier mode n'est désormais présenté que lorsqu'on demande d'afficher les modes supplémentaires: bref, il faut vraiment le vouloir pour forcer une consommation plus élevée

 

 

Il est également possible de créer son propre mode d'alimentation mais également, ce qui est intéressant en entreprise, de forcer un mode via le profil de l'utilisateur. Dans l'idéal ce paramétrage sera forcé à la création du "master" utilisé pour le déploiement dans l'entreprise.

 

Lorsqu'on ouvre le détail des options, on peut configurer les options principales : extinction de l'écran, mise en veille de l'ordinateur et, lorsque le driver le permet (ce qui n'est pas le cas sur mon Dell), la luminosité de l'écran.

 

 

L'accès aux paramètres d'alimentation avancés permet d'être encore plus fin sur le paramétrage. Il liste pas moins d'une douzaine de paramètres différents. Il est possible par exemple,  afin d'optimiser la consommation d'énergie, de définir que la qualité de restitution des vidéos sera moins bonne sur batterie que sur secteur !

 

 

 

A noter que l'ensemble de ces paramétrages peut être réalisé en "batch" via l'utilitaire de ligne de commande "POWERCFG" que je décris ci-dessous.

 

 

Diagnostiquer

Piloter l'alimentation est intéressant mais encore faut-il que le matériel et le logiciel sache optimiser les performances ce qui n'est pas toujours le cas. Windows 7 propose donc de réaliser un diagnostic qui permet d'identifier les points pouvant empêcher l'optimisation de la consommation.

 

Concrètement, il s'agit de faire une analyse des performances du système est des périphériques connectés. Bizarrement, cela ne peut se faire que sur la ligne de commande en lançant la commande "powercfg /ENERGY" (en tant qu'administrateur).

 

 

La commande produit un rapport web très intéressant.

 

 

 

On y découvre notamment:

  • - Les périphériques qui ne supportent pas la gestion optimisée de l'alimentation

 

 

  • - Les options d'alimentation qui ne sont pas adaptées,

 

 

  • - Les applications qui consomment beaucoup de temps processeur (et donc d'énergie). Ici, les Gadgets

 

 

  • - L'état de la batterie (pour les portables).

 

 

Sur ce dernier point vous noterez la différence entre la capacité de charge théorique et le dernier rechargement complet ! C'est là que j'ai découvert que ma batterie était bientôt morte  (remarquez, ces derniers temps je commençais à m'en douter).

 

 

 

Mesurer

Quel impact ont réellement toutes ces fonctionnalités sur la consommation électrique ? Difficile de le savoir car il faudrait monter un processus expérimental complexe. J'ai néanmoins voulu essayer de le mesurer, ou en tout cas d'appréhender ce que peut représenter la consommation globale de ma machine selon son état.

 

Et pour cela, le plus simple est de mesurer sa consommation électrique ! C'est possible en utilisant un outillage externe. Pour cela, j'ai  utilisé un Wattmètre qui s'intercale entre la prise et le secteur. Plus précisément, un modèle standard, le Brennensthul PM230:

 

 

J'ai ensuite raccordé l'alimentation du PC et de l'écran sur une prise multiple dédiée . Voilà ce que donne le dispositif:

 

 

 

J'ai ensuite empiriquement réalisé des mesures de consommation. Pour mémoire, ma machine est un Dell Latitude D630 qui a deux ans.

 

Voilà ce que la donne:

  • - PC en fonctionnement: 35 à 40 Watt/h
  • - PC en veille: 18 Watt/h
  • - PC en veille prolongée: 0 Watt/h (normal, il est éteint)
  • - PC en fonctionnement sur Ecran externe: 50 à 60 Watt/h
  • - Craddle plus Ecran externe en veille: 11 Watt/h (et dire que c'est ce que je laisse tous les soirs en partant de mon bureau )

 

A noter que si la batterie est en charge suite à une utilisation nomade prolongée, il faut ajouter environ 10 Watt/h à ces chiffres.

 

Pour comparer le niveau de consommation de cette machine, j'ai également réalisé des mesures comparatifs sur d'autres machines:

  • - PC de bureau (Dell Optiplex 760) en fonctionnement: 70 à 90 Watt/h
  • - Mac de bureau (Mac Mini) en fonctionnement: 40 à 45 Watt/h
  • - Ordinateur faible consommation (XO-1 du projet OLPC): 13 à 15 Watt/h.

 

A noter que le site Energy Star US maintien une base de données des consommations pour différents constructeurs.

Par contre, je n'ai pas mesuré la variation de consommation suivant les différents modes d'alimentation,  la différence étant difficile à appréhender avec mon outillage et en fonction de la charge processeur de la machine.

 

 

Tout cela démontre néanmoins que la consommation de la machine est à la fois un problème matériel et un problème logiciel. Microsoft, avec ses centaines de millions de machines installées dans le monde, a clairement un rôle à jouer. On ne peut que se réjouir que Windows 7 aille dans la bonne direction.

 

 

 

Par Lionel - Publié dans : GreenIT
Ecrire un commentaire - Voir les 0 commentaires

A propos de l'auteur


llaske_cantine.png
Lionel Laské est Directeur Assistance à Maîtrise d'ouvrage chez C2S, la SSII du groupe Bouygues.
Plus d'information sur l'auteur ici.

C2S-moyen-Groupe.gif

Retrouvez moi également sur Twitter:

  • Flux RSS des articles
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Signaler un abus - Articles les plus commentés