Prêt pour le processeur: le tueur de l'hyperviseur silencieux



Essayez Notre Instrument Pour Éliminer Les Problèmes

CPU Ready est quelque chose que vous ne connaissez peut-être pas. À première vue, cela peut sembler une bonne chose, mais ce n'est malheureusement pas le cas. CPU Ready sévit dans les environnements virtuels depuis plus longtemps que nous ne le savions. VMware définit cela comme le «Pourcentage de temps pendant lequel la machine virtuelle était prête, mais n'a pas pu être planifiée pour s'exécuter sur le processeur physique. Le temps de préparation du processeur dépend du nombre de machines virtuelles sur l'hôte et de leurs charges de processeur. » Hyper-V n'a commencé à fournir ce compteur que récemment (Hyper-V Hypervisor Virtual processor CPU Wait time per dispatch) et d'autres hyperviseurs peuvent toujours ne pas fournir cette métrique.



Afin de comprendre ce qu'est CPU Ready, nous devrons comprendre comment les hyperviseurs planifient des CPU virtuels (vCPU) vers des CPU physiques (pCPU). Lorsque du temps vCPU est nécessaire dans une VM, ce (s) vCPU (s) doivent être planifiés par rapport aux pCPU afin que les commandes / processus / threads puissent s'exécuter sur pCPU. Dans un monde idéal, il n'y a pas de conflits de ressources ni de goulots d'étranglement lorsque cela doit se produire. Lorsqu'une seule VM vCPU a besoin de planifier le temps par rapport à un pCPU, un cœur pCPU est disponible et le CPU Ready est très minime dans ce monde idéal. Il est important de noter que CPU Ready existe toujours mais dans un monde idéal, il est très minime et n'est pas remarqué.



Dans le monde réel, l'un des avantages de la virtualisation est que vous pouvez parier que beaucoup de vos machines virtuelles n'augmenteront pas tous leurs processeurs virtuels en même temps et que s'il s'agit de machines virtuelles à très faible utilisation, vous pouvez même deviner combien vous pouvez. chargez votre hôte physique en fonction de l'utilisation du processeur et de l'utilisation de la RAM. Dans le passé, des recommandations pour avoir un ratio de 4 vCPU à 1 pCPU ou même de 10: 1 en fonction de la charge de travail ont été faites. Par exemple, vous pouvez avoir un seul processeur quad core, mais 4 VM avec des vCPU chacune pour vous donner 16 vCPU à 4 pCPU ou 4: 1. Ce que les ingénieurs commençaient à voir, c'est que les environnements étaient tout simplement terriblement lents et qu'ils ne pouvaient pas comprendre pourquoi. L'utilisation de la RAM semble correcte, l'utilisation du processeur sur les hôtes physiques peut même être très faible, inférieure à 20%. La latence de stockage était extrêmement faible, mais les machines virtuelles étaient extrêmement lentes.



Ce qui se passait dans ce scénario était CPU Ready. Une file d'attente du vCPU était prête à être planifiée mais aucun pCPU disponible pour la planification. L'hyperviseur bloquerait la planification et provoquerait une latence pour la machine virtuelle invitée. C'est un tueur silencieux que jusqu'à ces dernières années, il n'y avait pas beaucoup d'outils à détecter. Dans une machine virtuelle Windows, il faudrait une éternité pour démarrer, puis quand il le fait enfin, lorsque vous cliquez sur le menu Démarrer, cela prendrait une éternité pour apparaître. Vous pouvez même cliquer à nouveau dessus en pensant qu'il n'a pas accepté votre premier clic et quand il rattrape finalement, vous obtiendrez un double clic. Sous Linux, votre VM peut démarrer en mode lecture seule ou même basculer les systèmes de fichiers en mode lecture seule à un moment donné plus tard.

Alors, comment lutter contre CPU Ready? Il y a plusieurs façons qui peuvent aider. La première consiste à surveiller les métriques CPU Ready. Dans VMware, il n'est pas recommandé d'aller au-dessus de 10% mais dans l'expérience personnelle, les utilisateurs commencent à remarquer au-dessus de 5 à 7% selon le type de VM et ce qu'elle exécute.

Ci-dessous, j'utiliserai quelques exemples de VMware ESXi 5.5 pour montrer CPU Ready. À l'aide de la ligne de commande, exécutez «esxtop». Appuyez sur 'c' pour la vue CPU et vous devriez voir une colonne ' % RDY ”Pour CPU Ready. Vous pouvez appuyer sur majuscule ' V ”Pour la vue VM uniquement.



cpu-ready-1

Ici, vous pouvez voir que% RDY est quelque peu élevé pour un environnement assez inutilisé. Dans ce cas, mon ESXi 5.5 exécute une VM de test au-dessus de VMware Fusion (hyperviseur Mac), donc on s'attend à ce qu'il soit un peu haut de gamme puisque nous exécutons une VM sur un hyperviseur au-dessus d'un autre hyperviseur.

Dans le client vSphere, vous pouvez extraire la VM spécifique et cliquer sur l'onglet Performances. À partir de là, cliquez sur 'Options du graphique'

cpu-ready-2

Dans les options de graphique, sélectionnez CPU, temps réel (si vous avez vCenter, vous pouvez avoir d'autres options de synchronisation que le temps réel). De là, dans les compteurs, sélectionnez «Prêt». Vous devrez peut-être désélectionner un compteur différent car la vue n'autorise que deux types de données à la fois.

cpu-ready-3

Vous noterez que cette valeur est un résumé de prêt par rapport à un pourcentage. Voici un lien vers un article de la base de connaissances VMware expliquant comment convertir les métriques résumées en pourcentage. - https://kb.vmware.com/kb/2002181

Lors de l'achat de matériel, plus de cœurs permet de réduire l'impact de CPU Ready. L'hyperthreading aide également. Bien que l'hyperthreading ne fournisse pas un deuxième cœur complet pour chaque cœur principal, il est généralement suffisant pour permettre la planification du vCPU sur pCPU et aider à atténuer le problème. Bien que les hyperviseurs commencent à s'éloigner de la recommandation de rapport vCPU à pCPU, vous pouvez généralement bien faire sur un environnement modérément utilisé avec un 4: 1 et partir de là. Lorsque vous commencez à charger des machines virtuelles, examinez la latence du processeur, la disponibilité du processeur et la sensation et les performances globales. Si vous disposez de machines virtuelles très performantes, vous souhaiterez peut-être les séparer sur d'autres clusters et utiliser un ratio inférieur et les garder légers. D'un autre côté, pour les machines virtuelles où les performances ne sont pas essentielles et où elles peuvent fonctionner lentement, vous pouvez vous souscrire beaucoup plus haut.

Le dimensionnement approprié des machines virtuelles est également un outil énorme pour lutter contre le CPU Ready. De nombreux fournisseurs recommandent des spécifications bien au-delà de ce dont la VM peut réellement avoir besoin. Traditionnellement, plus de processeurs et plus de cœurs = plus de puissance. Le problème dans un environnement virtuel est que l'hyperviseur doit planifier tous les processeurs virtuels sur les processeurs virtuels à peu près au même moment et le verrouillage des processeurs virtuels peut être problématique. Si vous disposez d'une VM de 8 vCPU, vous devez verrouiller 8 pCPU pour leur permettre de planifier en même temps. Si votre VM vCPU n'utilise que 10% du total des vCPU à un moment donné, vous feriez mieux de ramener le nombre de vCPU à 2 ou 4. Il est préférable d'exécuter une VM à 50-80% CPU avec moins de vCPU que 10% à plus de processeurs virtuels. Ce problème est en partie dû au fait que le planificateur de processeur du système d'exploitation est conçu pour utiliser autant de cœurs que possible, alors que s'il était formé pour maximiser les cœurs avant d'en utiliser plus, le problème pourrait être moins important. Une VM surdimensionnée peut bien fonctionner mais peut être un «voisin bruyant» pour d'autres VM. C'est donc généralement un processus dans lequel vous devez passer par toutes les VM du cluster pour les «dimensionner correctement» afin de voir des gains de performances.

Plusieurs fois, vous avez rencontré CPU Ready et il est difficile de commencer à dimensionner correctement les machines virtuelles ou à passer à des processeurs avec plus de cœurs. Si vous êtes dans cette situation, l'ajout d'autres hôtes dans votre cluster peut vous aider à répartir la charge sur plus d'hôtes. Si vous avez des hôtes avec plus de cœurs / processeurs que d'autres, le rattachement de machines virtuelles vCPU élevées à ces hôtes de cœur supérieurs peut également aider. Vous voulez vous assurer que votre hôte physique a au moins le même nombre de cœurs sinon plus que la VM, sinon il sera très lent / difficile de planifier l'excès de vCPU sur pCPU car ils doivent être verrouillés à peu près au même moment .

Enfin, votre hyperviseur peut prendre en charge les réservations et les limites sur la machine virtuelle. Parfois, les thèses sont fixées accidentellement. Des paramètres agressifs sur ceux-ci peuvent rendre le processeur prêt alors qu'en fait les ressources sous-jacentes sont disponibles pour lui. Il est généralement préférable d'utiliser les réservations et les limites avec parcimonie et uniquement lorsque cela est absolument nécessaire. Pour la plupart, un cluster correctement dimensionné équilibrera de manière appropriée les ressources et celles-ci ne sont généralement pas nécessaires.

En résumé, la meilleure défense contre CPU Ready est de savoir qu'il existe et comment le vérifier. Vous pouvez alors déterminer systématiquement les meilleures mesures d'atténuation pour votre environnement compte tenu de ce qui précède. Pour la plupart, les informations de cet article s'appliquent universellement à tout hyperviseur, bien que les captures d'écran et les graphiques s'appliquent spécifiquement à VMware.

5 minutes de lecture