Existe-t-il un paramètre optimal pour le nombre de cœurs de processeur exposés à une machine virtuelle?

23

VirtualBox, et éventuellement d'autres logiciels de VM, permettent à l'utilisateur de spécifier le nombre de CPU exposés à la VM. Dans mon cas particulier, j'ai un processeur dual core, avec Windows 7 64 bits fonctionnant en natif et Ubuntu 9.04 64 bits en tant que VM.

Le fichier d'aide suggère de ne pas définir ce paramètre au-dessus du nombre de cœurs physiques disponibles. C'est logique. Alors, est-il préférable d'allouer 1 ou 2 cœurs de processeur? Cela dépend-il entièrement de la charge CPU native?

sblair
la source

Réponses:

6

Cela dépend entièrement de ce que fait l'OS invité. D'après mon expérience personnelle, une machine virtuelle exécute un seul programme (serveur de génération, serveur trac, SVN, etc.), il n'y a donc aucune raison de le définir au-dessus d'un.

Un cas possible peut être si c'est un utilisateur final, disons une université qui utilise le système d'exploitation invité comme jetable (c.-à-d. TA), puis peut-être le mettre à plus d'un.

Nate
la source
Donc, en d'autres termes: pour un système temporaire, vous pouvez également maximiser le quota de base du processeur; mais pour une utilisation "normale" ou typique, réglez-le sur un cœur (afin de ne pas trop interférer avec les performances du système d'exploitation hôte)?
sblair
18

Les informations contenues dans cette réponse ne sont plus correctes . C'était correct à l'époque de la co-programmation stricte, mais ce n'est plus le cas.

Je garde la réponse ci-dessous pour la prospérité, mais ne vous fiez pas à elle pour être exacte pour les hyperviseurs modernes.


Vous ne devez jamais affecter tous vos cœurs en tant que vCPU dans une machine virtuelle.

Si une machine virtuelle demande tout temps CPU, VMWare a allouer soit tout le vCPU, ou aucun des vCPU.

Cela signifie que, sur un système à 4 cœurs si vous allouez les 4 cœurs, seul l'hôte ou l'invité peut se voir allouer du temps processeur, pas les deux en même temps.

Cela ruinera absolument les performances dans les deux environnements.

N'hésitez pas à allouer un nombre impair de cœurs (disons 3). Cela semble étrange, mais c'est une option totalement légitime.

En général, je n'alloue jamais plus de (n / 2) vCPU (dans votre cas, 2) - mais j'alloue normalement des cœurs sur des serveurs avec entre 12 et 32 ​​cœurs où vous pouvez allouer un grand nombre de vCPU sans impact majeur.

Mark Henderson
la source
c'est la seule réponse écrite à ce jour avec un quelconque degré d'autorité. Merci d'avoir partagé vos expériences.
G-Wiz
5
-1: Pas cohérent avec mon expérience. La machine virtuelle est un processus dont le temps processeur peut être planifié de la même manière que tout autre processus sur l'hôte. Vous pouvez ajuster la priorité du ou des processus VM sur l'hôte et le système équilibrera les charges de manière appropriée.
bwDraco
2
( suite ) Disons que vous avez un serveur 16 cœurs. Un exemple de configuration serait 4 machines virtuelles, chacune configurée pour 8 cœurs. Bien que cela puisse sembler être trop de cœurs virtuels, cela permet aux machines virtuelles individuelles de mieux évoluer sur des charges de travail plus lourdes. Si l'utilisation combinée dépasse le nombre de cœurs physiques, l'hôte équilibrera les charges en conséquence. C'est ainsi que la virtualisation peut augmenter le débit et réduire les coûts - en tirant le meilleur parti du matériel hôte.
bwDraco
@DragonLord - cette réponse a plus de 2 ans sur une question qui a presque 4 ans et peut être basée sur des informations obsolètes. Je fais référence à la «Strict Co-Scheduling» d'ESX, mais je ne me souviens pas de l'âge de ces informations, et je ne me suis pas tenu au courant de la façon dont la planification du processeur a changé au cours des dernières années.
Mark Henderson
1
Je voulais juste laisser tomber une note ici que sur Ubuntu 14.04 et 16.04, il y a des problèmes de démarrage ainsi que des plantages si vous définissez le nombre de CPU sur un nombre impair. Je n'ai pas pu comprendre pourquoi parce que j'ai simplement décidé de le maintenir à des nombres pairs pour éviter les problèmes.
Dorian
3

Le nombre de cœurs exposés aux processeurs invités n'affecte pas les performances autant que vous le souhaitez. Il ajuste simplement la quantité de cœurs que le CPU invité "voit".

Selon la configuration de l'émulateur, il pourrait littéralement réduire de moitié les performances de la machine virtuelle, ne rien faire ou avoir un impact uniquement sur la façon dont le système d'exploitation invité / les applications répartissent leur planification de threads.

Il est préférable de le laisser par défaut. Si vous rencontrez des problèmes de performances sur le PC hôte, vous pouvez simplement ajuster la priorité du processus avec le Gestionnaire des tâches de Windows.

Percée
la source
3

Comme Nate l'a mentionné, tant que votre machine virtuelle servira principalement à exécuter un processus à thread unique, il n'y a pas de raison d'allouer plus d'un cœur.

Cependant, si vous prévoyez de l'utiliser d'une manière qui peut bénéficier de plus de cœurs (programme multi-thread, de nombreux programmes parallèles, ..), l'histoire est plus compliquée. J'avais précédemment supposé que l'utilisation de la moitié de votre CPU pour votre VM était une bonne idée. Il s'avère que ce n'est pas toujours optimal.

La seule façon de s'en assurer est d'exécuter des tests de performances .. Je ne sais pas pourquoi, mais dans mon système Core2 Quad (qui prend en charge VT-x, la pagination imbriquée, ..), l'utilisation de 1 des 4 cœurs fonctionne mieux que d'utiliser 2 cœurs ou plus! Je vois cela simplement dans les temps de démarrage de la VM, mais aussi lors des benchmarks de compilation.

Avec d'autres matériels, les résultats sont différents. J'ai également un i7 avec 8 cœurs, et les performances semblent évoluer beaucoup mieux avec le nombre de cœurs (en utilisant 4 heureusement).

Mon conseil: testez d'abord un nouveau matériel.

Arnout
la source
1

Je ferais confiance au planificateur du système d'exploitation et je définirais simplement la machine virtuelle sur le nombre de cœurs physiques, sauf si vous savez que vous voulez toujours que l'hôte ait un cœur potentiellement inactif pendant que vous êtes occupé dans la machine virtuelle.

Andrew Coleson
la source
1

Cela dépend de ce que vous voulez faire sur la machine virtuelle ainsi que sur la machine physique. Si vous devez utiliser la machine virtuelle pendant que le système d'exploitation hôte est utilisé pour une autre activité, il peut être préférable d'utiliser deux cœurs de processeur pour la machine virtuelle afin que l'hôte en ait deux restants si la machine virtuelle est en pleine charge. En revanche, si vous travaillez principalement sur la machine virtuelle, vous pouvez utiliser tous les cœurs de processeur.

Cependant, à moins que l'on ne s'attende à ce que l'invité utilise les quatre cœurs à la fois, vous pouvez tous les utiliser en toute sécurité tout en continuant à travailler sur le système d'exploitation hôte. N'oubliez pas que vous pouvez toujours ajuster la priorité du processus de la machine virtuelle pendant qu'il s'exécute sur le système d'exploitation hôte, et le système équilibrera les charges en conséquence.

bwDraco
la source
Ceci est basé sur mon expérience avec VirtualBox. Comme je ne connais pas les produits VMware, je peux me tromper; si c'est le cas, je supprimerai cette réponse.
bwDraco
0

oui, je dirais aussi que ça dépend. Mais je dirai ce que je préfère faire. Au travail, j'ai un processeur quad core. Donc, pour mon image virtuelle (win7), j'ai alloué deux CPU. De cette façon, je peux utiliser à la fois la machine hôte et la machine virtuelle, et elles ont chacune des ressources CPU égales.

Joel Martinez
la source