J'ai un 2.8 quad core i7 avec un VirtualBox. J'ai la possibilité d'attribuer jusqu'à 4 cœurs à une machine invitée, mais je n'en ai créé que deux. Quels sont les avantages/inconvénients d’attribuer plus de cœurs à un invité? En passant, je suis toujours capable de jouer à StarCraft 2 sur les paramètres Ultra à fond tout en exécutant deux OS invités (Win 7 et Ubuntu). Il en va de même avec BFBC2 (mes testeurs de stress). Comment le i7 réagit-il aux charges inégales sur les cœurs?
Les cœurs "virtuels" que vous affectez à une VM peuvent être utilisés en multitraitement au sein du système d'exploitation client. Si vous n'attribuez qu'un seul cœur à une machine virtuelle, le système d'exploitation invité n'a aucune chance de répartir la charge sur plusieurs cœurs. Supposons donc quelques scénarios pratiques:
Dans ce cas, le système d'exploitation invité ne pourra utiliser qu'un seul cœur. Par conséquent, si vous exécutez une application multi-thread qui évolue bien sur plusieurs cœurs, elle ne fonctionnera toujours que sur un seul cœur. Par conséquent, tous les threads du système d'exploitation invité doivent partager un seul noyau physique.
L'exécution d'un système d'exploitation invité dans cette configuration qui charge complètement le processeur générera une charge du processeur du système d'exploitation hôte d'environ 25% (un des quatre cœurs chargés sur l'hôte).
Bien entendu, vous pouvez toujours exécuter des tâches gourmandes en processeur au sein de votre système d'exploitation hôte et utiliser les 3 cœurs restants.
Dans ce cas, vous pouvez exécuter des applications multi-thread bien dimensionnées au sein de l'invité VM, ce qui permet d'exploiter pleinement les 4 processeurs virtuels. VirtualBox utilisera 4 cœurs physiques pour traiter les tâches planifiées dans la VM. Par conséquent, la charge de votre processeur hôte pourrait atteindre un maximum de 100% d'utilisation.
La réponse à cette question dépend en grande partie de ce que vous souhaitez faire. Dans certains cas, il peut être utile d’attribuer tous les cœurs à un VM ou même d’exécuter plusieurs VM ayant chacun le nombre total de processeurs attribués. Dans ce cas, un VM peut exploiter pleinement toute la puissance de traitement de l'hôte. Si le nombre de processeurs affectés aux ordinateurs virtuels est supérieur au nombre physiquement présent, la charge sur les ordinateurs virtuels sera affectée. Pour éviter cela, vous pouvez dédier certains cœurs à des ordinateurs virtuels spécifiques. Par exemple, exécuter 2 ordinateurs virtuels avec 2 processeurs affectés sur un nœud à 4 cœurs peut aider chaque VM à obtenir 2 processeurs dédiés (en supposant que la charge de travail imposée par le système d'exploitation hôte ne prend pas une partie de la puissance de traitement ).
Encore une fois, cela dépend du logiciel exécuté. Si vous exécutez une VM inactive (aucun programme gourmand en ressources processeur), la charge imposée par cette VM sera proche de 0%. Vous pouvez même exécuter 10 ordinateurs virtuels en parallèle tout en enregistrant une charge proche de 0% de l'ordinateur hôte si tous les ordinateurs virtuels sont inactifs.
La répartition de la charge du processeur dépend en grande partie d'un composant intégré spécifique au système d'exploitation, appelé planificateur. Pour Windows XP, le planificateur a essayé de charger à tour de rôle tous les cœurs de la CPU. Ainsi, exécuter une tâche mono-thread avec une charge complète sur un processeur quad-core aurait généré une charge d'environ 25% sur chaque core.
Malheureusement, cela s’est avéré mauvais pour la gestion moderne de l’alimentation du processeur. Pour les systèmes modernes, il est même avantageux qu'un seul cœur soit chargé à 100% avant même que le deuxième cœur ne soit impliqué. La raison en est que tant qu’il n’ya pas de charge suffisante pour utiliser pleinement un noyau, les autres noyaux peuvent rester en mode sommeil profond pour économiser de l’énergie et réduire la dissipation de chaleur.
Pour certains processeurs tels que Intel Core i-Series et AMD (Bulldozer) plus récent, ceci est d'autant plus intéressant que dans le cas où seul un sous-ensemble des cœurs est utilisé, ceux qui sont inutilisés sont éteints. Cela réduit la consommation d'énergie du processeur. Les deux sociétés (Intel et AMD) commencent à utiliser le budget thermique et la consommation d'énergie, puis à overclocker les cœurs actifs. Cela peut donc donner un coup de pouce aux applications mono-thread (qui ne peuvent pas être distribuées sur plusieurs cœurs pour travailler sur une tâche en parallèle). Cependant, lorsque tous les cœurs sont actifs, la plupart de ces technologies "boost" n’ont que peu d’effet sur la puissance de traitement car la situation "tous les cœurs actifs" correspond exactement à la situation pour laquelle le processeur a été conçu. Mais lorsque vous éteignez certains cœurs, les cœurs restants peuvent fonctionner de manière overclockée sans provoquer une surchauffe de la puce (ou une consommation d'énergie supérieure) par rapport au cas où tous les cœurs sont actifs.
La réponse est donc que votre Core i7 gère très bien la charge inégale sur des cœurs simples et peut même améliorer les performances des applications à un seul thread. Cependant, cette augmentation est de l'ordre de quelques pour cent alors que les applications multithreads pouvant distribuer la charge sur plusieurs cœurs de processeur peuvent être amplifiées par des facteurs (x2 sur dual core, 4x sur quad core ...) dans des conditions optimales . Ainsi, le multi-threading fournit toujours plus de puissance en termes de puissance de processeur combinée que le single-threading combiné à l'optimisation de l'horloge.
Je n'ai pas approfondi les manuels sur le site VB, mais je suppose que l'affectation de cœurs à une machine invitée permettrait à l'OS invité de voir plusieurs cœurs et donc aux applications de tirer parti de ceux-ci. les cœurs supplémentaires la vitesse/puissance/efficacité ajoutée, identique à celle du système d'exploitation hôte.