Le coût de l'énergie ayant largement augmenté (jusqu'à 3 fois pour les entreprises) il est important de chercher à contrôler et économiser l'énergie.
Je programme les mises en veille quelque soit l'appareil ou l'utilisation (pas d'exception). Pour les ordinateurs je suis parti sur une mise en veille des écrans au bout de 15 minutes et 20 minutes pour la mise en veille de l'ordinateur. J'ajoute également la mise en veille automatique des autres appareils : imprimantes, copieurs. L'arrêt de l'ordinateur est obligatoire au delà d'une heure d'inactivité.
J'ai créé un petit calculateur qui me permet d'estimer le coût de consommation basé sur le prix en kWh. Tous les ordi ne sont pas compatibles avec les outils qui captent la consommation mais j'ai pu me faire une idée suivant les modèles. Pour les serveurs je me suis basé sur ce que consomme les onduleurs et l'autonomie disponible.
Pour savoir si les ordinateurs sont bien éteints et pas juste en veille je regarde la durée de fonctionnement du processeur. Si je suis sur l'ordi en question je peux simplement vérifier dans le gestionnaire de tâche. Sinon j'ai créé un script qui me permet de récupérer cette donnée sur chaque ordinateur dans le domaine et d'en générer un fichier csv.
Il existe une commande Windows toute faite qui permet pendant une minute de vérifier la consommation d'énergie et le comportement du système. powercfg -energy à lancer en administrateur. Il génère un fichier html (Windows/System32/energy-report.html par défaut) qui permet d'identifier les erreurs et warnings concernant la consommation d'énergie.
L'arrêt des serveurs le weekend est encore en questionnement. Ils sont très rarement utilisés le weekend et ne sont pas sensés l'être. L'arrêt automatique des serveurs est déjà en place mais le démarrage automatique n'est pas possible car ils ne sont pas tous compatibles avec le Wake On Lan (je cherche une autre solution). Je vais commencer par arrêter une partie des serveurs le weekend, ceux qui ne sont pas indispensables le lundi matin.
J'établi une liste des services qui tourne sur une machine et détermine les services qui s'exécutent mais qui ne sont pas utiles au bon fonctionnement. Limiter le nombre de service exécuté permet d'économiser des performances et donc de l'énergie. C'est aussi un moyen de fermer des accès pour améliorer la sécurité.
Le langage de programmation peut aussi être un acteur dans l'économie d'énergie. Lors de l'utilisation ou de la création d'outils/logiciels, le langage de programmation utilisé ainsi que son optimisation permettent de réduire le ratio temps d'exécution/charge de mémoire qui est la consommation d'énergie.
Pour diminuer cette consommation d'énergie software il faut privilégier les langages compilés qui ont une vitesse d'exécution plus rapide. Un langage typé est préférable pour l'utilisation de la mémoire.
Les langages C, C++, Rust, Ada et Java sont les moins énergivore. Je n'ai pas vu Julia dans les tests de comparaison de performance mais il est presque aussi performant que le C et est conçu pour optimiser le temps d'exécution grâce à sa compilation à chaud.
Quelques astuces pour garder le contrôle sur le temps d'exécution et la charge mémoire :
Définir les variables avec le bon type. Lorsqu'une variable est déclarée elle alloue la mémoire maximum du type attendu. Si la valeur de la variable est limitée il ne faut pas la déclarer comme un int par défaut, ça peut être un short, un unsigned short ou un byte. Il faut également éviter au maximum les changements de type.
Maîtriser le scope des variables. Une variable doit être stockée le temps de son utilisation, l'allocation de la mémoire dépense de l'énergie même quand la variable n'est pas utilisée, il est donc important de contrôler sa durée de vie en les déclarant dans les bons scopes.
Définir les constantes. Lorsqu'une variable est constante le compilateur fera moins de vérification et économisera des calculs. Par exemple dans un boucle incrémentielle si la condition de fin de boucle est constante, le langage ne vérifiera pas à chaque boucle si la condition a changée.
Passer par référence. Pour traiter des données de variable il est préférable de la passer en argument d'une fonction plutôt que la traiter directement même si elle est globale. Le temps d'exécution sera moins important et le passage par référence réduit de beaucoup l'allocation mémoire.
Typer les définitions et profiter de la surcharge. Si une fonction peut attendre différents types alors il peut avoir une définition multiple, ce qui apportera de la stabilité en renvoyant le même type et séparer la vérification de type en différents blocs.
Optimiser les vérifications de condition. Les conditions ont un ordre de priorité allant de la gauche verts la droite. Il faut penser à mettre le cas le moins validé en priorité afin de diminuer les temps de vérification car si le premier argument n'est pas valide, la suite n'a pas besoin d'être vérifié. Pour l'ordre des if / else if c'est le cas le plus validé qui doit être vérifié en premier pour entrer le moins possible dans chaque bloc de condition.
Limiter le nombre d'onglet du navigateur internet et fermer les applications qui ne sont pas utilisées.
Pas de fond d'écran animé.
Pas de Widget.