web-dev-qa-db-fra.com

Un VM avec 2 CPU est-il vraiment plus rapide qu'un autre avec 4 CPU?

Notre service informatique a créé un VM avec 2 CPU alloués plutôt que les 4 que j'ai demandés. Leur raison est que le VM fonctionne mieux avec 2 CPU plutôt que 4 (selon La raison est que l'hyperviseur VM (VMWare dans ce cas) attend que tous les CPU soient disponibles avant d'engager l'un d'eux. Ainsi, il faut plus de temps pour attendre 4 plutôt de 2 CPU.

Cette affirmation a-t-elle un sens?

67
AngryHacker

C'était vrai, mais ce n'est plus exclusivement vrai.

Ce à quoi ils font référence est Co-Scheduling strict .

Le plus important de tous, alors que dans l'algorithme de co-ordonnancement strict, l'existence d'un vCPU en retard entraîne l'arrêt complet de la machine virtuelle. Dans l'algorithme de co-ordonnancement détendu, un vCPU leader décide s'il doit co-arrêter lui-même en fonction de l'inclinaison par rapport au vCPU frère le plus lent

Maintenant, si l'hôte n'a que 4 threads, alors vous seriez stupide de les allouer tous. Si il a deux processeurs et 4 threads par processeur, alors vous pourriez ne souhaitez pas allouer tout le contenu d'un seul processeur, car votre hyperviseur doit essayer de conserver les vCPU sur le même nœud NUMA pour rendre l'accès à la mémoire plus rapide, et vous rendez ce travail plus difficile en allouant un socket entier à un seul = VM (Voir page 12 de cela PDF ci-dessus).

Il existe donc des scénarios dans lesquels moins de processeurs virtuels peuvent fonctionner mieux que plus, mais ce n'est pas vrai 100% du temps.

Cela dit et fait, j'alloue très rarement plus de 3 processeurs virtuels par invité. Tout le monde en reçoit 2 par défaut, 3 s'il s'agit d'une lourde charge de travail et 4 pour des choses comme les serveurs SQL ou les machines virtuelles de traitement par lots très lourdes, ou un serveur de terminaux avec beaucoup d'utilisateurs.

62
Mark Henderson

Cela dépend en grande partie de l'hyperviseur sous-jacent et des administrateurs qui le dirigent, laissez-moi vous expliquer:

  1. C'est une mauvaise pratique de vous donner arbitrairement 4 CPU simplement parce que vous l'avez demandé. D'une manière générale, vous pensez vous avez besoin de 4; mais la surveillance des ressources indique que vous n'avez besoin que de 1.
  2. VMware ESXi par exemple nécessite le verrouillage de tous les processeurs pCPU lorsqu'un vCPU fait une demande de ressources CP ; donc sur cet hyperviseur c'est mauvais pour les performances. KVM ne fait pas de verrouillage comme le fait ESXi; il utilise le planificateur de noyau sous-jacent, mais à long terme, il peut créer des conflits de CPU.
  3. Si vous construisez des systèmes dès le départ avec 4 processeurs, vous n'êtes pas vraiment en train d'évoluer, mais vers le haut (ce qui est une mauvaise pratique en particulier sur les machines virtuelles). Vous voudrez peut-être vérifier comment vous architecturez quoi que ce soit sur lequel vous travaillez afin qu'il puisse être conçu pour s'adapter aux infrastructures cloud modernes d'aujourd'hui.

Que pouvez-vous en tirer? Créez toujours des machines virtuelles avec des ressources minimales et augmentez au besoin. Évoluez toujours au lieu d'augmenter et vous pourrez exécuter votre application n'importe où.

En raison du verrouillage qui peut être rencontré avec l'hyperviseur, il est en effet vrai que 2 CPU peuvent être plus rapides que 4 CPU.

15
user101130

Oui, la déclaration a un sens en général. Cependant, c'est quelque chose que vous devez tester pour votre configuration et votre charge de travail exactes. Parfois, plus de CPU est préférable si vous pouvez réellement en profiter. Cependant, si vous n'avez pas vraiment autant de parallélisme, un VM configuré avec moins de processeurs fonctionnera souvent légèrement mieux car il évite les ralentissements dus aux pauses d'état prêt du processeur.

J'ai réduit les processeurs virtuels sur un certain nombre de nos machines virtuelles et j'ai constaté une amélioration du débit sur la majorité. Une poignée a empiré et a dû être augmentée sur le nombre de vCPU.

4
Brian Knoblauch