Hôte Quad Core avec hyper-threading, combien de processeurs configurer dans VirtualBox?

10

J'ai un processeur quad-core i7 avec hyperthreading (8 cœurs logiques), lorsque j'ai configuré une machine virtuelle pour utiliser 8 processeurs, VirtualBox m'a donné un avertissement disant que je n'ai que quatre cœurs (ce qui est vrai) et que cela peut provoquer un problème de performance. Mais l'hyper-threading est une fonctionnalité matérielle, donc le système d'exploitation voit 8 cœurs et il envoie des instructions à tous les 8. Que se passe-t-il si la définition de 4 oblige la machine virtuelle à utiliser 2 cœurs (4 threads) au lieu de 4 threads simultanés (sur les 4 cœurs) )? L'avertissement que j'ai reçu prend-il en compte le fait que ma machine a un hyper-threading?

Anthony
la source

Réponses:

9

Sur la base du benchmark réalisé par Kristian Wedberg, je dirais que vous devriez utiliser tous les cœurs logiques dont vous disposez.
J'ai également fait mon propre benchmark en utilisant le même CPU (i7, 4 CPU avec HT) qui a confirmé l'augmentation des performances pour les applications multi-thread. Si le PC invité (Win. 8.1 x64) a utilisé les 8 cœurs, le PC hôte (Ubuntu x64) a également utilisé les 8 cœurs.

entrez la description de l'image ici

J'ai également comparé les performances des applications à un seul thread. Dans les deux cas, j'ai mesuré les mêmes valeurs, il n'y a donc pas de pénalité en utilisant plus que le nombre physique (mais jusqu'à logique) de CPU.
Ici, vous pouvez voir que 1 CPU pleine charge sur le PC invité entraînera 1 charge CPU sur le PC hôte.

entrez la description de l'image ici

icl7126
la source
D'accord. J'utilisais 4 cœurs et j'ai constaté que cela prend seulement environ 50% du temps CPU lors de la construction de mon projet. Puis, malgré l'avertissement, je suis passé à 8, ce qui est le nombre de cœurs logiques, la génération prenait 100% de temps processeur et je pense qu'elle s'est exécutée plus rapidement qu'auparavant.
Deqing
C'est assez intéressant, je me souviens avoir lu que Linux essaie spécifiquement de concentrer la charge sur 1 cœur logique de chaque cœur HT physique pour augmenter l'efficacité. Je me demande si le noyau Linux invité arrive à voir que le CPU est hyper-thread et à optimiser sa planification pour ce type de configuration.
Anthony
8

J'ai trouvé que même s'il est possible (et sans doute plus rapide) dans VirtualBox (mon expérience était avec la version 5.1.0) d'allouer des vCPU à une machine virtuelle basée sur des processeurs logiques, on peut rencontrer des problèmes à l'intérieur du système d'exploitation invité lors de l'exécution à charge élevée . Dans mon cas, une machine virtuelle Windows 2012 R2 avec 12 vCPU sur un hôte Ubuntu 16.04 à 8 cœurs (qui signale 16 processeurs logiques) ferait du BSOD pendant une charge CPU élevée avec le message d'erreur DPC_WATCHDOG_VIOLATION. Une analyse de minidump utilisant osronline.com a montré que e1g6032e.sys (le pilote réseau Intel 100/1000 natif de Windows) était à l'origine de la violation.

Cela m'amène à croire que la synchronisation à l'intérieur du système d'exploitation invité est affectée négativement lors de l'allocation de processeurs virtuels en fonction de la capacité du processeur logique et de l'exécution de la machine virtuelle à haute charge pendant des périodes prolongées. Dans mon cas, une charge de 100% du processeur à l'intérieur de la machine virtuelle Windows pendant quelques minutes entraînerait le BSOD. Après avoir réduit le nombre de vCPU à 8 (ce qui correspond au nombre de cœurs physiques de l'hôte), la machine virtuelle Windows ne fait plus de BSOD dans des situations de charge élevée similaires. La documentation en ligne de VirtualBox dit qu'il faut le faire, mais n'offre aucune raison.

Dans mon environnement, il y avait également deux autres machines virtuelles Ubuntu en cours d'exécution, chacune avec 8 vCPU propres. La charge sur eux était cependant minime au moment des problèmes BSOD de la machine virtuelle Windows.

Albert Gazendam
la source
Réponse impressionnante (avec les sources), merci! Quelques années de retard, mais maintenant je sais :)
Anthony
2

L'avertissement que j'ai reçu prend-il en compte le fait que ma machine a un hyper-threading?

Oui. Si vous définissez un nombre de cœurs dans une machine virtuelle supérieur au nombre dont vous disposez physiquement, le processus de planification des tâches dans Virtual Box sur valide les ressources du processeur, ce qui entraîne des problèmes de performances majeurs.

Quant à la répartition de la charge entre les cœurs, c'est le travail du système d'exploitation hôte et doit se comporter dans le bon manoir.

user195560
la source
4
Avez-vous des données pour étayer vos déclarations? Quelqu'un a fait une recherche sur envobi.com/post/virtualbox-hyper-threading-benchmark-surprise et recommande de définir le nombre de CPU de Virtual Box sur le nombre de CPU logiques .
Maxim Egorushkin
0

S'agissait-il d'une machine virtuelle d'origine sur votre machine? Parfois, vous obtiendrez des erreurs particulières si vous clonez une machine virtuelle et la déplacez vers une autre machine et / ou modifiez les paramètres.
Je recommande de télécharger et d'installer la dernière version de Virtual Box avec les dernières extensions.

J'ai validé les huit cœurs et je ne reçois pas cette erreur avec mon i7 exécutant une machine virtuelle avec Ubuntu 13.10.

ClaireW
la source