Introduction
Pour mon 1er article sur vrun, je souhaite
aborder le fonctionnement de l’ordonnanceur CPU sous VMware 5.1 et supérieur. Tout
est parti d’une question qu’un client m'a posée:
« Si une VM possède 8 vCPU et que seuls 4 pCPU sont
disponibles, la VM peut-elle s’exécuter ? »
Après avoir donné les premiers éléments de réponse au
client, je me suis rendu compte qu’il existait en règle générale une mauvaise
compréhension du fonctionnement de l’ordonnanceur CPU VMware.
J’espère donc que
cette suite d’articles vous aidera à y voir un peu plus clair.
Terminologie
Avant de rentrer dans les explications, voici quelques termes de vocabulaire nécessaires pour la bonne compréhension de cet article :
- CMP = une architecture mutli-core (CMP = chip multi-core)
- pCPU = CPU physique du serveur ESXi
- vCPU (Virtual CPU) correspond au CPU d’une machine virtuelle. L'hôte ESXi le voit comme un processus ou « World ».
- pCPU = CPU physique du serveur ESXi
- vCPU (Virtual CPU) correspond au CPU d’une machine virtuelle. L'hôte ESXi le voit comme un processus ou « World ».
Maintenant que nous sommes d'accord sur les termes utilisés, nous pouvons commencer !
Les enjeux de l’ordonnanceur CPU
Pour comprendre son fonctionnement, nous devons comprendre
ses objectifs. Les enjeux de l’ordonnanceur sont multiples :
- Efficace: maximiser l’utilisation des CPU physiques afin que les VMs soient performantes.
- Réactif : ne pas laisser un environnement trop longtemps dans la file d’attente.
- Equitable : respectueux des priorités (shares), réservations, limites de chaque vCPU.
- Evolutif : les limites de la version 6 de vSphere ont été repoussées par rapport à la version 5.5.
Principe de fonctionnement
Les différents états d’un vCPU
Un vCPU est mis dans l’état WAIT lorsqu’il est en attente d’une ressource externe, comme une action de l’utilisateur par exemple, ou un accès disque trop lent. Une fois la ressource externe opérationnelle, le vCPU repasse dans l’état READY, c'est-a-dire prêt à être exécuté de nouveau.
- Réactif : ne pas laisser un environnement trop longtemps dans la file d’attente.
- Equitable : respectueux des priorités (shares), réservations, limites de chaque vCPU.
- Evolutif : les limites de la version 6 de vSphere ont été repoussées par rapport à la version 5.5.
Par exemple, vSphere 6.0 supporte :
- 128 vCPU par VM
- 4 096 vCPU par ESXi
- 1 024 VMs par ESXi
- 128 vCPU par VM
- 4 096 vCPU par ESXi
- 1 024 VMs par ESXi
Principe de fonctionnement
Le principe de base de l’ordonnanceur VMware, est de considérer tous les « Worlds » comme égaux. On parle de « Proportional Share Algorithm ». L’ordonnanceur créé juste une file d’attente contenant les Worlds et les exécute dans l’ordre au fur et à mesure.
Bien évidemment,
le poids de chaque World est influencé par les réservations, limites et
shares attribués à une VM. Cela permet donc de définir la priorité d’exécution
d’un vCPU par rapport à un autre.
En fonction de la configuration de la VM (nombre de vCPU) et des paramètres
appliqués à cette VM (réservation, limites et shares) l’ordonnanceur définit
une valeur appelée « Entitlement »
(ou "droit" en français) attribuée à chaque VM. C’est tout simplement la quantité de temps CPU
que cette VM est autorisée à consommer. L’utilisateur peut jouer sur la valeur
initiale de l’entitlement en attribuant une priorité (share) plus forte à une
VM. Donc si une VM1 dispose de 2 fois plus de shares qu’une VM2, la VM1 aura 2
fois plus de temps CPU que la VM2.
L’Entitlement est donc une valeur numérique. Plus cette
valeur est faible, moins la VM a consommé de temps CPU et donc plus la VM a une
priorité forte pour la prochaine exécution. L’entitlement nous permet donc de chronométrer et comptabiliser (appeler aussi « charger ») en permanence le temps CPU alloué
à chaque World. La priorité de chaque World est donc recalculée de manière
dynamique contrairement à un système Unix classique.
Les différents états d’un vCPU
Maintenant que nous avons compris les enjeux et principes de
base de l’ordonnanceur, nous allons regarder plus en détails les mécanismes
apportés par VMware.
Chaque CPU virtuel de vos VMs se trouve à chaque instant
dans un état précis. Voici les différents états possibles d’un vCPU (Virtual
CPU):
-
RUN
-
READY
-
COSTOP
-
WAIT
Lors du 1er ajout dans la liste de l’ordonnanceur,
le vCPU est mis soit en mode RUN
soit en mode READY, cela dépend de la
disponibilité des pCPU (Physical CPU). Si un pCPU est tout de suite disponible,
le vCPU est alors schédulé et se trouve alors en RUN (exécution), sinon il est
mis en mode en READY (prêt à être exécuté sur un pCPU).
Lorsqu’un vCPU est dans l’état READY et qu’un pCPU devient
disponible, il est distribué par l’ordonnanceur de l’ESXi et passe dans l’état
RUN. Il peut ensuite être dé-schedulé pour être mis dans l’état READY ou COSTOP
(Nous verrons l’état COSTOP dans le chapitre « Co-Scheduling »).
Un vCPU est mis dans l’état WAIT lorsqu’il est en attente d’une ressource externe, comme une action de l’utilisateur par exemple, ou un accès disque trop lent. Une fois la ressource externe opérationnelle, le vCPU repasse dans l’état READY, c'est-a-dire prêt à être exécuté de nouveau.
Dans la prochaine partie, nous verrons les mécanismes mis en
place par VMware pour optimiser les performances et répartir la charge entre
les différents coeurs et socket CPU.
0 commentaires :
Enregistrer un commentaire