Estimer la consommation électrique d'un serveur dédié

Par Guillaume Subiron, administrateur système et contributeur au projet Energizta.

Alors que l’on voit fleurir de plus en plus de calculatrices carbone pour évaluer l’impact « du cloud », voire l’impact d’un mail ou de l’affichage d’une page web, nous avons voulu remonter à la source de tous ces systèmes en nous posant une question, a priori simple : combien consomme un ordinateur, et particulièrement un serveur physique ?

Prenons un exemple simple, que nous allons suivre au fil de cet article, un serveur moyen des dix dernières années :

  • un CPU Intel Xeon autour de 4 cœurs à 3.5Ghz
  • 32 à 64Go de RAM
  • 2 à 3 SSD de 256 à 512Go chacun
  • pas de carte graphique

Ce serveur représente la majorité de la gamme Pro chez Dedibox, ou la gamme Advance et maintenant les Rise chez OVH.

Ce serveur, donc, il consomme combien ? Au repos, en pleine charge… ? Mettons au repos, il consomme combien ?

Il y a un an nous avons commencé à sonder quelques administrateurs systèmes travaillant en Datacenter, et nous avons eu à peu près toutes les réponses dans un spectre de 5W à 200W.

Imaginez que demain vous achetiez une voiture thermique, et le constructeur vous annonce qu’elle consomme 0.1L aux 100km. Vous allez un peu réagir, parce que vous savez qu’une voiture consomme entre 5 et 15L aux 100km.
Et bien, ne pas savoir ce que consomme un serveur physique, c’est donner tout le pouvoir aux calculatrices carbones d’annoncer n’importe quoi. On part d’un serveur pour lequel nous n’avons aucune idée en ordre de grandeur de ce qu’il consomme, on ajoute une architecture applicative plus ou moins complexe, et on se retrouve avec des chiffres abstraits et impossibles à juger.

Alors, ce serveur, il consomme combien ?

Et bien, ce n’est pas simple.

“Mesurer” la consommation électrique

RAPL / Scaphandre

De nos jours, la source de mesure électrique la plus communément accessible pour mesurer la consommation d’un serveur, c’est une API Intel nommée “RAPL” (Running Average Power Limit). Cette API permet d’accéder, depuis le système d’exploitation, à la consommation électrique du processeur et de la RAM. Son fonctionnement est très mal documenté, selon la génération de processeur il peut s’agir d’une mesure (avec un capteur) ou d’une évaluation basée sur l’état du processeur. Parfois elle inclut la RAM, parfois pas. On trouve même parfois une mesure globale à toute la machine (psys)…

https://hubblo-org.github.io/scaphandre-documentation/explanations/rapl-domains.html

C’est notamment sur RAPL que se basent les outils PowerJoular, PowerAPI, ou encore Scaphandre.

Sur le serveur que nous avons pris en exemple plus haut, au repos, RAPL représente entre 3 et 10W, c’est à dire moins qu’une ampoule LED. Et la consommation peut monter jusqu’à environ 50 ou 60W.

Mais, le CPU et la RAM, cela ne suffit pas. Sur un serveur il y a aussi des disques durs ou des SSD, une carte réseau, une carte mère, une alimentation, et parfois une carte RAID, un GPU…

Et tout ça, ça consomme combien ?

Et bien… ce n’est pas simple.

Les wattmètres

Dans l’idéal, pour mesurer la consommation électrique globale d’un serveur il suffirait de le brancher à un wattmètre. Mais c’est malheureusement impossible sur les offres d’hébergement dédié, parce qu’en tant que client nous n’avons pas cette liberté d’aller brancher du matériel en datacenter. Cela demanderait aussi beaucoup de matériel. Un wattmètre connecté coûte une vingtaine d’euros, on peut expérimenter avec, mais on ne va pas en mettre derrière chaque serveur. À grande échelle, un SmartPDU rackable coûte aussi beaucoup plus cher.

IPMI

Par chance, sur certains serveurs, on peut obtenir la consommation électrique de l’alimentation par l’IPMI, une interface de management du matériel. Ce n’est pas le cas chez OVH (il manque le cable qui permettrait de le faire), mais c’est le cas chez Dedibox.

Cela tombe bien, nous avons sous la main 200 serveurs Dedibox. On peut donc s’en servir pour comparer la consommation électrique fournie par RAPL/Scaphandre à la consommation globale.

Et alors ? Ça donne quoi ?

Et bien… ce n’est vraiment pas simple, mais on va mettre des images.

Étude comparative RAPL vs Global

Pour cette étude, nous avons développé Energizta, un script capable de photographier l’état d’un serveur toutes les 10 secondes (consommation électrique dans RAPL et IPMI, mais aussi température, utilisation CPU, disque, réseau, RAM, etc.). Ces données sont ensuites moyennées par heure, et aggregées dans une base de données.

Ce script a été exécuté pendant 6 mois sur plus de 200 serveurs administrés par Sysnove, en contribution à Boavizta.

Sur les graphes ci-dessous, chaque point représente la moyenne sur 1h de mesures prises toutes les 10s. On travaille sur des tendances générales et des ordres de grandeurs.

Nous avons aussi fait le choix d’arrondir toutes les mesures au Watt près. C’est largement suffisant pour notre travail, et nous ne voulons surtout pas donner l’illusion d’avoir plus de précision.

Les cas “simples”

Le graphe ci-dessus représente en abscisses la consommation du CPU et de la RAM estimée et obtenue par RAPL, et en ordonnées la consommation globale (a priori…) obtenue par IPMI (ou DCMI, ou sensors, mais je vous épargne les détails).

Sur ces serveurs (150 serveurs graphés pendant 4 mois), on peut le dire, RAPL marche plutôt bien. On a une tendance bien linéraire entre RAPL et la consommation électrique globale.

Si on prend l’hypothèse très simpliste qu’un SSD consomme 2W constants, on se retrouve avec un modèle Global = RAPL + 2W * nbSSD.

Sur ce jeu de données cette formule permet de prédire la mesure IPMI avec une erreur moyenne de 0.62W, un écart type de 1.6W, et une erreur maximale de 12W !

Et RAPL marche à peu près aussi bien au repos à < 1 load average (0.75W d’erreur moyenne, 1.3W écart type, 5W maximum) que lorsque le serveur est chargé à > 5 load average (2.4W d’erreur moyenne, 2.5W écart type, 12W maximum).

C’est pas mal non ? Mais ça se complique…

Les cas moins simples

Voici le Pro-4-L (7 serveurs graphés pendant 4 mois) :

On remarque que le graphe est décallé vers le haut.

Si je reprends le modèle précédent, Global = RAPL + 2W * nbSSD, j’ai un écart moyen de 50W, avec 2.4W d’écart type. Donc le graphe est linéaire, comme les précédents, mais décallé de 50W vers le haut.

Dit autrement, il y a 50W consommés quelque part en plus du CPU et des SSD.

Et malheureusement ce n’est pas le seul modèle concerné, voici une quinzaine de serveurs similaires :

Alors, ces 50W, ils sortent d’où ? Et bien… nous ne savons pas complètement. Nous avons d’abord cru a une erreur de l’IPMI sur ces serveurs, un problème de calibration, et puis nous avons un peu creusé.

Il y a une différence majeure entre les Pro- “simples” et le Pro-4-L, mais elle demande d’entrer un peu dans la technique. Le Pro-4-L est un serveur 1U Dell DSS1510, tout à fait classique. Mais les Pro- “simples” sont des serveurs “lame”, c’est à dire qu’une partie du matériel est mutualisée entre plusieurs serveurs dans un chassis.

Quelle partie ?

Et bien, l’alimentation, les ventilateurs…

Est-ce que tout ça peut expliquer une différence de 50W ?

Peut-être, oui. Sur ce Pro-4-L par exemple, il y a 5 ventilateurs qui peuvent chacun tirer 14.4W (donc 72W en tout). D’après nos observations ils tournent plutôt autour de 10% de leur capacité. En considérant une consommation linéaire on peut donc estimer qu’ils ne représentent que 7W sur nos graphes.

Et le reste ?

Et bien, même si l’ordre de grandeur semble crédible, nous ne savons pas encore l’expliquer.

Et avec un wattmètre ?

Pour en avoir le cœur net, nous avons aussi mené une étude sur un serveur OVH connecté à un wattmètre (précision +/-5W). Nous avons mesuré la consommation électrique toutes les 5 secondes sur une journée, et lancé divers stress tests pour provoquer des variations :

Ici aussi le résultat est très clair, 55W d’écart.

Pourquoi ? Et bien… là, c’est pas clair…

Nous continuons nos recherches, en espérant que cet écart fera l’objet d’un prochain article.

Retour sur les cas simples

Le problème de ces écarts de 50W, c’est que les cas que nous pensions simples se compliquent aussi. On ne peut plus se contenter de Global = RAPL + 2W * nbSSD, parce qu’il faut au minimum tenir compte des ventilateurs qui tournent au niveau du chassis, et les affecter à chaque lame. Idéalement il faudrait même les affecter au prorata de la consommation de la lame par rapport à celle du chassis. Et peut-être que l’analyse de ces 50W d’écart nous donnera d’autres composants à répartir ainsi.

Et tout cela complique énormément les choses sur des offres d’hébergement dédié où, en tant que client, nous n’avons pas les spécifications du matériel.

Conclusions

Alors, ce serveur type déterminé tout à l’heure, il consomme combien ?

D’après nos mesures, on peut globalement conclure que :

  • Au repos (<0.1 de load), il consomme entre 10 et 60W.
  • En activité normale (0.5 à 1 de load), entre 20 et 80W.
  • Et jusqu’à 80, 150 voire 200W si on le charge vraiment.

Bon, c’est flou, mais c’est déjà quelque chose. Cela donne des premiers ordres de grandeur.

Le problème de ce niveau d’imprécision, c’est qu’il peut assez rapidement faire basculer une étude sur des mauvaises conclusions, et aboutir à une mauvaise stratégie.

Pour être plus précis :

  • Sur les Intel Xeon E3 et E5, RAPL semble donner une très bonne évaluation de la consommation électrique variable d’un serveur. Sur un jeu de données de 150 serveurs, mesurés toutes les 10 secondes pendant 4 mois, et moyennés par heure, RAPL est parfaitement linéaire avec la consommation globale…

  • Néanmoins, sur des serveurs au repos, une erreur de 5W peut représenter plus de 50% de la consommation électrique globale. Qu’est-ce qui explique la différence sur une heure entre un point (10W RAPL, 12W Global), et un point (10W RAPL / 20W Global) ? Sur notre première étude, nous n’avons trouvé aucune corrélation simple. L’écart n’a pas l’air d’être expliqué par les IO SSD, ni par les IO réseau, pas non plus par la température.

  • Si, en moyenne, RAPL représente bien la part variable d’un serveur, il faut parfois y ajouter plus de 50W pour obtenir la consommation globale. Cela peut parfois représenter plus de 10x la consommation électrique remontée par RAPL, et à l’heure où nous écrivons cet article, nous ne savons pas expliquer ces 50W.

Recherches à creuser

Ce n’est que le début de nos travaux. À ce stade, nous pensons que plusieurs sujets méritent d’être creusés :

  • Reproduire ces travaux dans une autre infrastructure et sur du matériel différent.

  • Vérifier précisément l’hypothèse de consommation de 2W par SSD. Étudier les disques durs et les NVMe, comparer différents modèles, comparer au repos et sous forte charge, en restant sur des ordres de grandeur au Watt près.

  • Comprendre ce qui compose les 50W d’écart constant sur des serveurs 1U simples comme le Pro-4-L. Idéalement reproduire cet écart dans un laboratoire domestique, avec wattmètre, pour essayer de mesurer indépendamment la consommation des composants.

  • Déterminer une formule pour estimer la consommation globale d’un serveur à partir de RAPL. En étant très clair sur les marges d’erreur en fonction du niveau de connaissance du matériel.

  • À terme, déterminer une formule pour estimer la consommation globale d’un serveur sans même avoir RAPL. Là aussi en étant d’autant plus clair sur les marges d’erreur.

Si vous êtes interressés par ce sujet, si vous souhaitez contribuer ou si vous avez simplement des éléments d’information à nous apporter, vous pouvez nous contacter de deux manières :

→ Envoyez un email à energizta@boavita.org
→ Rejoignez le chat public Energizta https://chat.boavizta.org/public-boavizta/channels/energizta


© Boavizta