web-dev-qa-db-fra.com

Comment le VCPU est-il aligné avec la CPU? (Vm avec plus de cœurs que le processeur a)

J'ai un VM exécuté sur vsphere 6.5.Qui a 24 VCPU. Le serveur dispose de deux processeurs physiques (Xeon E5-2699 V4) qui ont 22 cœurs et hyperthreading sont activés.

Comment sont exactement la course à la VCPU sur la CPU physique? Serait-il préférable de réduire le VCPU à 22 qu'il pourrait courir sur un processeur phyalique ou vsphere peut-il même utiliser dans ce cas de multiples processeurs pysiques?

4
user3235860

Un seul VM== ne doit jamais avoir plus de processeurs virtuels que des cœurs physiques logiques disponibles.

Avec HyperThreading activé, vous êtes à 44 cœurs physiques logiques, cela devrait donc aller bien. Cependant, cela dépend fortement de combien d'autres VMS fonctionnent sur cet hôte. Une chose que vous devez garder à l'esprit est la manière dont le planificateur de la CPU du serveur ESXI fonctionne. Pour chaque cycle de la CPU, il attend toujours jusqu'à ce qu'il y ait un noyau physique disponible pour chaque processeur virtuel sur un VM. Donc, dans votre cas, il sera toujours attendu jusqu'à ce que 22 cœurs physiques soient disponibles avant qu'un cycle de la CPU puisse être traité. Si vous avez beaucoup plus de VMS sur cet hôte pouvant conduire à une grande partie de la CPU et à une vm très lente.

Personnellement, j'essaie toujours de garder le nombre de VCPUS à 8 ou moins. Si vous le pouvez, plutôt que vous éliminez votre VMS que vous augmentez.

Une autre considération: avec l'état actuel des mesures d'atténuation des attaques de spectres et de fusion, il est généralement recommandé de désactiver l'hyperthreading, car cela réduit les vecteurs d'attaque possibles. Si vous décidez de désactiver l'hyperthreading, votre configuration ne sera plus utilisable plus.

1
Gerald Schneider

1) Les noyaux hyperthratifs ne sont pas de vrais noyaux et ne devraient pas être comptés comme tels. Les estimations varient, mais j'ai vu des chiffres qui permettant une hyperthreading vous confèrent aussi bas que 10 à 30% de performances supplémentaires dans VSphere.

2) Attribuer plus de VCPUS à un VM doit toujours être considéré comme attentif, en particulier à des nombres plus élevés. La raison (radicalement simplifié) est que le planificateur de ressources doit trouver un emplacement de temps où il y a suffisamment de noyaux disponibles pour exécuter simultanément tous les noyaux. Donc, sur un hôte simplifié, hyper-irréaliste, d'exemple avec 10 noyaux, et 10 VMS avec 2 VCPUS, vous auriez 5 de VMS en attente (AKA. Arrêtez) la moitié du temps, et 5 VMS exécutant, alternant entre chaque état. C'est bon depuis que tous les VMS obtiennent du temps processeur et tout est dandy. Maintenant, nous introduisons la 11e VM, avec 10 VCPUS. Soudain, vous avez 10 VMS en attente pendant que le Big VM obtient ses trucs, puis 5 d'entre eux exécutent, puis les 5 autres. Donc maintenant que votre VMS fonctionne 33% du temps, au lieu de 50%. Dans un environnement complexe, l'allocation de quantités relativement énormes de VCPUS peut réduire les performances, en particulier si le VM _ ne fonctionne rien qui puisse utiliser tout le VCPUS.

3) Ma meilleure pratique personnelle est de ne jamais donner un VM plus de la moitié des noyaux logiques sur un seul processeur, il s'agit généralement d'un nombre normalement tout à fait assez sain avec des processeurs Xeon de toute façon. Cela évite les problèmes de "en fonction" de "cœurs" sur les "noyaux" et permet également à votre VMS sur un seul processeur, ce qui facilite le planificateur.

Il y a aussi le concept de nœuds numa à prendre en compte si vous commencez à donner un VM plus vcpus qu'un seul processeur dans l'hôte peut fournir, vous forcez essentiellement vsphere pour diviser le VM Entre 2 nœuds NUMA, permettant d'accéder à la mémoire plus lentement, car toute mémoire ne sera pas locale à un processeur.

Il y a beaucoup plus de magie derrière comment vSphere plane VM _ ressources et ce que j'ai écrit ci-dessus est extrêmement simplifié, mais ce sont des directives qui m'ont bien servi depuis presque une décennie.

0
Stuggi

Je ne peux pas penser à une situation où vous voudriez qu'un seul VM== ait plus de vcpus alloué que des noyaux physiques dans un serveur.

Benchmark votre charge de travail avec la configuration actuelle VM Configuration, puis voir ce qui se passe lorsque vous réduisez progressivement le nombre de VCPUS. Prenez note à la fois de la vitesse d'exécution de votre charge de travail et de l'utilisation réelle des CPU sur l'hôte/VM du point de vue de l'hyperviseur plutôt que celui du système d'exploitation invité.

Habituellement, lors de la configuration de VMS, il est avantageux de commencer par un nombre plutôt faible de VCPUS, puis de votre chemin jusqu'à ce que la performance augmente les flattens. Pour de nombreuses charges de travail, vous n'avez pas nécessairement besoin de coller au même nombre de VCPUS, même s'il existe des exceptions à ce principe. Encore une fois, un bon test devrait montrer comment votre application traite de son environnement.

0
Mikael H

Selon les maximums VMware ( https://configmax.vmware.com/ ) Vous pouvez avoir 32 VCPUS par noyau physique, mais selon les meilleures pratiques, vous ne devez pas attribuer plus de noyaux que vous n'avez réellement.

N'oubliez pas que vous puissiez limiter, réserver et hiérarchiser selon vos charges de travail et vos besoins.

Vous pouvez lire une autre réponse postée sur le même sujet ici .

0
Sir Lou