Les cœurs "virtuels" que vous affectez à une machine virtuelle 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:
Hôte avec 4 processeurs, invité attribué à 1 processeur
- Machine hôte exécutant 4 cœurs physiques
- SE client au sein de la VM assigné 1 core
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.
Hôte avec 4 processeurs, invité assigné à 4 processeurs
- Machine hôte exécutant 4 cœurs physiques
- SE client au sein de la VM assignée à 4 cœurs
Dans ce cas, vous pouvez exécuter des applications multithread bien dimensionnées dans la machine virtuelle invitée, 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 machine virtuelle. Par conséquent, la charge de votre processeur hôte pourrait atteindre un maximum de 100% d'utilisation.
Alors, quel réglage devriez-vous choisir?
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 à une machine virtuelle ou même d’exécuter plusieurs machines virtuelles, chacune ayant le nombre total de processeurs attribués. Dans de tels cas, une machine virtuelle 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 VM avec 2 CPU assignées sur un nœud à 4 coeurs peut aider chaque VM à obtenir 2 CPU dédiées (en supposant qu'aucune charge ne soit imposée par le système d'exploitation hôte qui prend également une partie de la puissance de traitement).
L'affectation de tous les cœurs à une machine virtuelle a-t-elle un impact négatif sur mon hôte?
Encore une fois, cela dépend du logiciel exécuté. Si vous exécutez une machine virtuelle qui est inactive (aucun programme gourmand en ressources processeur), la charge imposée par cette machine virtuelle sera proche de 0%. Vous pouvez même exécuter 10 ordinateurs virtuels en parallèle tout en enregistrant une charge de processeur hôte proche de 0% si tous les ordinateurs virtuels sont inactifs.
Comment le processeur se comporte-t-il sur une charge inégale?
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 processeur. 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 de l’énergie des processeurs modernes. 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.
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.