Lorsque vous parlez de performances sur un serveur, il existe différentes manières de voir les choses. Il y a le temps de réponse apparent (similaire à la latence du réseau) et le débit (similaire à la bande passante du réseau).
Certaines versions de Windows Server sont livrées avec les paramètres d’alimentation équilibrée activés par défaut. Comme Jeff l'a souligné. Windows 2008 R2 en fait partie. De nos jours, très peu de processeurs sont à cœur unique. Cette explication s’applique donc à presque tous les serveurs Windows que vous rencontrerez, à l’exception des ordinateurs virtuels à cœur unique. (plus sur ceux plus tard).
Lorsque le plan d'alimentation équilibré est activé, le processeur tente de réduire la quantité d'énergie utilisée. Pour ce faire, il désactive la moitié des cœurs de la CPU dans un processus appelé "parking". Seule la moitié des processeurs seront disponibles à la fois, donc elle consomme moins d'énergie pendant les périodes de faible trafic. Ce n'est pas un problème en soi.
Le problème, c’est que, lorsque les CPU ne sont pas amorties, vous avez doublé le nombre de cycles disponibles pour le système et soudainement déséquilibré la charge du système, passant de (par exemple) une utilisation de 70% à 35%. Le système se penche sur cette question et, une fois la rafale de trafic traitée, il se dit: "Hé, je devrais recomposer un peu pour économiser l'énergie". Et c'est le cas.
Voici la mauvaise partie. Afin d'éviter une répartition inégale de la chaleur et de l'énergie dans les cœurs du processeur, il a tendance à parquer les processeurs qui ne l'ont pas encore été. Et pour que cela fonctionne correctement, la CPU doit tout vider des registres de la CPU (cache L1, L2 et L3) vers un autre emplacement (probablement la mémoire principale).
À titre d’exemple hypothétique, supposons que vous disposiez d’une CPU à 8 cœurs avec C1-C8.
- Actif: C1, C3, C5, C7
- Stationné: C2, C4, C6, C8
Lorsque cela se produit, ils deviennent tous actifs pendant un certain temps, puis le système les stocke comme suit:
- Actif: C2, C4, C6, C8
- Garé: C1, C3, C5, C7
Mais, ce faisant, le vidage de toutes les données du cache L1-L3 génère une bonne quantité de temps système, ce qui permet d'éviter des erreurs étranges dans les programmes vidés du pipeline de processeurs.
Il y a probablement un nom officiel pour cela, mais j'aime bien l'expliquer par le battage du processeur. Fondamentalement, les processeurs passent plus de temps à déplacer des données en interne que à traiter des demandes de travail.
Si vous avez un type d'application nécessitant une latence faible pour ses demandes, vous devez désactiver les paramètres d'alimentation équilibrée. Si vous n'êtes pas sûr qu'il s'agisse d'un problème, procédez comme suit:
- Ouvrez le "Gestionnaire de tâches"
- Cliquez sur l'onglet "Performances".
- Cliquez sur "Open Resource Monitor"
- Sélectionnez l'onglet "CPU"
- Regardez sur le côté droit de la fenêtre sur les différents processeurs.
Si vous voyez l'un d'entre eux se garer, vous remarquerez que la moitié d'entre eux sont garés à un moment donné, ils vont tous se mettre en feu, puis l'autre moitié se garer. Il alterne d'avant en arrière. Ainsi, les processeurs du système sont en pleine effervescence.
Machines virtuelles: ce problème est encore pire lorsque vous exécutez une machine virtuelle car il existe une surcharge supplémentaire pour l'hyperviseur. En règle générale, pour qu'une machine virtuelle puisse s'exécuter, le matériel doit disposer d'un créneau horaire disponible pour chacun des cœurs à chaque tranche de temps.
Si vous avez un matériel de 16 cœurs, vous pouvez exécuter des ordinateurs virtuels avec plus de 16 cœurs, mais pour chaque tranche de temps, seuls 16 processeurs virtuels au maximum seront éligibles pour cette tranche de temps et l'hyperviseur doit s'adapter à tous les cœurs d'une machine virtuelle. dans cette tranche de temps. Il ne peut pas être réparti sur plusieurs tranches de temps. (Une tranche de temps est essentiellement un ensemble de X cycles du processeur. Ce peut être 1000 ou 100 000 cycles)
Ex: matériel de base 16 avec 8 VM. 6 ont 4 processeurs virtuels (4C) et 2 ont 8 processeurs virtuels (8C).
Timeslice 1: 4x4C Timeslice 2: 2x8C Timeslice 3: 2x4C + 1x8C Timeslice 4: 1x8C + 2x4C
Ce que l’hyperviseur ne peut pas faire, c’est diviser la moitié de l’attribution en une tranche de temps entre les 4 premiers processeurs d’une machine virtuelle 8 vCPU, puis sur la tranche suivante, attribuer le reste aux 4 autres vCPU de cette machine virtuelle. C'est tout ou rien dans le temps.
Si vous utilisez Microsoft Hyper-V, les paramètres de contrôle de l'alimentation peuvent être activés dans le système d'exploitation hôte, ce qui signifie qu'ils se répercuteront sur les systèmes clients, ce qui les affectera également.
Une fois que vous voyez comment cela fonctionne, il est facile de voir comment l’utilisation des paramètres de contrôle équilibré de l’alimentation entraîne des problèmes de performances et des serveurs lents. L'un des problèmes sous-jacents est que la demande entrante doit attendre la fin du processus de stationnement / annulation d'UC avant que le serveur puisse répondre à la demande entrante, qu'il s'agisse d'une requête de base de données, d'une demande de serveur Web ou de toute autre chose. .
Parfois, le système va stationner ou récupérer les processeurs au milieu d'une requête. Dans ces cas, la demande démarre dans le pipeline de la CPU, en est vidée, puis un cœur de CPU différent reprend le processus à partir de là. Si la requête est assez volumineuse, cela peut se produire plusieurs fois au cours de la requête, en transformant ce qui aurait dû être une requête de base de données de 5 secondes en une requête de base de données de 15 secondes.
La plus grande chose que vous verrez avec l'utilisation de Balanced Power est que les systèmes vont se sentir plus lents pour répondre à presque toutes les demandes que vous faites.