Gestion de l’alimentation et impact sur les performances des processeurs et des traitements sur SQL Server

Si je vous dis ACPI vous me direz sans doute que nous sommes dans le domaine de la gestion et la configuration avancée de l’énergie des ordinateurs. En fait ACPI (Advanced Configuration and Power Interface) est une norme développée par un conglomérat d’entreprise tels que Intel, HP, Toshiba, Phoenix Technologies et Microsoft. Celle-ci permet au système d’exploitation d’envoyer des signaux de contrôle aux différents périphériques pour pouvoir les mettre hors tension afin réduire la consommation globale d’énergie d’un ordinateur. Parmi ces périphériques celui qui nous intéressera est le processeur. Nous retrouvons d’un côté Intel qui fournit une gestion avancée de l’énergie (PPM) directement dans le BIOS et qui permet de contrôler la consommation d’un processeur par le biais de deux catégories d’états : C-State et P-State. De l’autre nous retrouvons Microsoft qui permet de piloter ces deux catégories d’états depuis le système d’exploitation à l’aide des Power Plans (ou Power Schemes) de Windows.

icon_arrow P-States et C-States

Intel propose deux catégories d’états de processeurs qui permettent de réduire leurs consommations d’énergies. Les C-States assurent une consommation minimale des processeurs pendant que ceux-ci sont dans l’état dormant et n’exécutent pas de code. Cet type d’état est paramétrable dans le bios et est contrôlé depuis le système d’exploitation via le processus dormant :

image

Un processeur peut passer par différents états de transition (C0 à C6) qui diminuent d’autant sa consommation d’énergie mais augmente par la même occasion la latence de réponse du processeur. De plus les transitions d’états peuvent également être coûteuses en terme de performance.

Le type d’état P-States, quant à lui, diminue par pallier (P0 à P16) la consommation d’énergie des processeurs mais aussi leurs capacités correspondantes en jouant sur leurs voltage et leurs fréquences d’horloges. On peut imaginer que ce type d’optimisation de consommation d’énergie peut jouer pleinement son rôle dans des environnements où la performance n’est pas la priorité ou encore dans ceux pour lesquels il existe des périodes d’inactivés importantes par exemple (automate bancaire attendant une interaction avec un utilisateur). Cependant avec un serveur SQL il y aura un impact direct sur les performances.

icon_arrow Power Plans

Depuis Windows 7 et Windows Server 2008 R2 nous pouvons bénéficier des Power Plans (je garderai la dénomination anglaise dans ce billet) qui permettent de gérer la gestion la consommation d’énergie de l’ordinateur (les Power Plans sont appelés Power Schemes dans les versions antérieurs de Windows). Chaque Power Plan permet de gérer un ensemble de propriétés qui contrôle directement l’agressivité d’un état P-State. Windows 7 et 2008 R2 possèdent plusieurs plans prédéfinis :

  • Balanced (plan défini par défaut à l’installation du système d’exploitation)
  • High Performance
  • Power Saver

Chaque plan définit les fourchettes de consommations d’énergie et des fréquences d’utilisations des processeurs autorisés. Par exemple si l’on prend les propriétés concernant le processeur dans le Power Plan Power Saver on peut remarquer que les processeurs ne pourront être utilisés qu’à 75% de leur capacité et pourront éventuellement à 5% de leur capacité en cas de charge de travail négligeable.

image

Le plan par défaut Balanced permet d’utiliser les capacités maximales des processeurs mais ceux-ci pourront fonctionner à 5% de leur puissance selon la charge de travail. Enfin le power plan High Performance utilise les capacités maximales des processeurs quelle que soit l’activité présente sur l’ordinateur.

Diminuer la consommation d’énergie en fonction de l’activité n’est une bonne chose en soi mais si l’on prend le cas de SQL Server on peut se poser la question suivante : comment le système d’exploitation peut savoir quand diminuer la consommation d’énergie et par conséquent les capacités des processeurs en fonction de la charge en provenance de SQL Server ? En réalité il n’y a bien que SQL Server qui connaisse la réponse. Nous pouvons donc nous retrouver dans des cas où les capacités des processeurs seront diminués par le système d’exploitation alors qu’une requête exécutée sur le serveur SQL requiert toute leur puissance.

 

icon_arrow Exemples

J’ai rencontré ce problème chez un de mes clients il y a quelques temps suite à une migration de données. Le nouveau serveur avait des performances beaucoup plus importantes que l’ancien en terme de processeurs mais malgré cela nos avons constaté une diminution générale des performances des requêtes sur ce dernier. En analysant la situation on s’est vite rendu compte que le temps CPU des requêtes avait augmenté (via l’option SET STATISTICS TIME ON et le paramètre CPU Time).

J’ai pû reproduire ce problème sur mon ordinateur avec une requête type de client. Celui-ci qui possède les caractéristiques processeurs suivantes :

  • 2 x Intel® Core(TM) i7 CPU M620 cadencé à 2.67 Ghz.
  • Multithreading activé : le système d’exploitation voit 4 processeurs logiques
  • Intel SpeedStep Technologie activé : cette fonctionnalité permet de changer dynamiquement la fréquence d’horloge d’un processeur sur demande d’un logiciel

Pour pouvoir visualiser les fréquences d’horloges utilisés j’ai utilisé deux outils :

  • Perfmon fourni en natif par Microsoft avec l’objet de compteur ProcessorPerformance
  • CPU-Z qui permet de générer des informations de certains périphériques

Commençons par visualiser les performances des processeurs en fonction de l’utilisation des différents power plans :

  • Balanced 

image

Vous ne rêvez pas !! La fréquence d’utilisation des processeurs est de 1197 Mhz. Nous sommes loin des spécifications annoncés soit 2.67 Ghz. Il n’y a pratiquement pas d’activité sur mon ordinateur au moment de cette prise d’image. La vitesse des processeurs peut cependant osciller entre cette fréquence d’horloge et la fréquence maximale.

  • Power Saver

 image

Les performances sont à peu près  à ceux du Power Plan Balanced à quelques différences près. Tout à l’heure nous avons vu que le Power Plan Power Saver n’autorisait qu’une utilisation limitée des capacités processeurs quelle que soit la charge présente sur le serveur.

 

  • High Performance

image 

L’adoption de ce plan permet d’utiliser les capacités maximales des processeurs.

Le tableau suivant montre l’influence des Power Plans sur le temps CPU utilisé par une des requêtes types :

image

Si je prends le Power Plan High Performance comme référence on peut voir que l’adoption des plans Balanced et Power Saving augmentent le temps CPU respectivement de 7% et 55% dans mon cas !!! Alors quelle est la solution ? Adopter le plan High Performance ? Je dirais que si le serveur SQL souffre de performances au niveau processeur il faudra probablement changer le plan utilisé par Windows par défaut et vérifier la configuration du PPM dans le BIOS.

David BARBARIN (Mikedavem)
MVP SQL Server

Laisser un commentaire