Une machine virtuelle avec 2 processeurs est-elle vraiment plus rapide qu'une machine avec 4 processeurs?

67

Notre service informatique a créé une machine virtuelle avec 2 processeurs alloués au lieu des 4 que j'avais demandés. Leur raison est que la VM fonctionne mieux avec 2 processeurs plutôt que 4 (selon eux). La raison en est que l'hyperviseur de la machine virtuelle (VMWare dans ce cas) attend que tous les processeurs soient disponibles avant de les engager. Ainsi, il faut plus de temps pour attendre 4 plutôt que 2.

Cette déclaration a-t-elle un sens?

AngryHacker
la source

Réponses:

62

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

Ce à quoi ils font référence, c’est la co-ordonnancement strict .

Le plus important de tous, alors que dans l'algorithme de co-ordonnancement strict, l'existence d'un vCPU en retard provoque la co-arrêt de la machine virtuelle entière. Dans l'algorithme de co-ordonnancement assoupli, une vCPU leader décide si elle doit co-arrêter elle-même sur la base du biais par rapport à la vCPU la plus lente des deux frères.

À présent, si l'hôte ne comporte que 4 threads, il serait alors ridicule de les allouer tous. S'il dispose de deux processeurs et de 4 threads par processeur, vous pouvez ne pas vouloir 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 faciliter l'accès à la mémoire. rendre ce travail plus difficile en allouant un socket entier à un seul ordinateur virtuel (voir page 12 de ce PDF ci-dessus).

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

Cela dit, j’alloue très rarement plus de 3 vCPU par invité. Tout le monde reçoit 2 par défaut, 3 s'il s'agit d'une charge de travail lourde et 4 pour des éléments tels que des serveurs SQL, des machines virtuelles de traitement par lots très lourdes ou un serveur de terminal avec de nombreux utilisateurs.

Mark Henderson
la source
3
Juste un côté - même en dehors des obstacles à la virtualisation, il est généralement difficile d'écrire un logiciel qui exploite le parallélisme. Si vos développeurs ne sont pas assez performants, il serait peut-être préférable d'avoir quatre hôtes virtuels exécutant une instance du logiciel chacun plutôt qu'un hôte exécutant quatre threads d'exécution.
Luaan
4
@Luaan La boîte a SQL Server, donc je suppose qu'ils ont de bons logiciels là-bas.
AngryHacker
1
@ AngryHacker oui Le serveur SQL peut utiliser les 4 cœurs de manière très efficace en supposant que vous ayez les MAXDOPparamètres appropriés . Cependant, en fonction de la charge de travail, un serveur SQL excessivement taxé est souvent le signe d'une conception de base de données incorrecte: index défectueux, aucun index clusterisé, trop d'index, aucune optimisation, etc. (pas toujours, mais souvent).
Mark Henderson
1
@Luaan C'est toujours du parallélisme ... juste avec une latence beaucoup plus grande s'ils ont besoin de se parler. :)
Reirab
@ MarkHenderson C'est plutôt bien optimisé, mais certaines charges de travail sont tout simplement trop volumineuses pour être gérées facilement par 2 processeurs et une tonne d'autres requêtes à la fois.
AngryHacker
15

Cela dépend en grande partie de l'hyperviseur sous-jacent et des administrateurs qui l'exécutent. Laissez-moi vous expliquer:

  1. Il est déconseillé de vous donner arbitrairement 4 processeurs simplement parce que vous en avez fait la demande. De manière générale, vous pensez avoir besoin de 4; mais la surveillance des ressources indique que vous n’avez besoin que de 1.
  2. VMware ESXi, par exemple, requiert le verrouillage de tous les pCPU lorsqu'un vCPU demande des ressources CPU . donc sur cet hyperviseur, il est mauvais pour la performance. KVM ne verrouille pas comme ESXi; il utilise le planificateur de noyau sous-jacent, mais peut néanmoins créer des conflits avec le processeur à long terme.
  3. Si vous construisez des systèmes à partir de 4 processeurs dès le début, vous n'allez pas évoluer, mais augmenter (ce qui est une mauvaise pratique, en particulier sur les ordinateurs virtuels). Vous voudrez peut-être vérifier comment vous architectez ce que vous travaillez afin qu'il puisse être construit pour s'adapter aux infrastructures de cloud modernes.

Que pouvez-vous apprendre de cela? Créez toujours des machines virtuelles avec un minimum de ressources et augmentez-les si nécessaire. Adaptez-vous toujours au lieu d'augmenter et vous pourrez exécuter votre application n'importe où.

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


la source
4

Oui, la déclaration a un sens en général. Cependant, vous devez toutefois tester votre configuration exacte et votre charge de travail. Parfois, il est préférable de disposer de plus de processeurs si vous pouvez en tirer parti. Toutefois, si vous ne disposez pas de beaucoup de parallélisme, une machine virtuelle configurée avec moins de processeurs fonctionnera souvent un peu mieux, car elle évite les ralentissements dus aux pauses de l'état de disponibilité du processeur.

J'ai réduit le nombre de vCPU sur un certain nombre de nos machines virtuelles et constaté une amélioration du débit de la majorité. Une poignée d’entre eux s’est aggravée et devait être augmentée sur le nombre de vCPU.

Brian Knoblauch
la source