J'ai un quad core i7 2.8 avec VirtualBox. J'ai la possibilité d'assigner jusqu'à 4 cœurs à une machine invitée, mais je n'en ai attribué que deux jusqu'à présent. Quels sont les avantages / inconvénients d'assigner plus de cœurs à une machine invitée? Au fait, je suis toujours capable de jouer à StarCraft 2 avec tous les paramètres au maximum tout en exécutant deux systèmes d'exploitation invités (Win 7 et Ubuntu), et il en va de même avec BFBC2 (mes testeurs de stress). Comment l'i7 réagit-il aux charges inégales sur les différents cœurs?
Réponses
Trop de publicités?Les cœurs "virtuels" que vous attribuez à une machine virtuelle sont disponibles pour une utilisation en multiprocessus dans le système d'exploitation client. Si vous attribuez un seul cœur à une VM, alors il n'y a aucune chance pour le système d'exploitation invité de répartir la charge sur plusieurs cœurs. Donc, imaginons quelques scénarios pratiques:
Hôte avec 4 CPU, invité attribué 1 CPU
- Machine hôte exécutant 4 cœurs physiques
- Système d'exploitation client dans la machine virtuelle attribué 1 cœur
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 s'adapte bien à plusieurs cœurs, elle s'exécutera toujours sur un seul cœur. Ainsi, tous les threads du système d'exploitation invité doivent partager un seul cœur physique.
Exécuter un système d'exploitation invité dans cette configuration qui charge complètement le CPU donnera une charge CPU du système hôte d'environ 25% (un sur 4 cœurs chargé sur l'hôte).
Vous pouvez bien sûr toujours exécuter des tâches consommatrices de CPU dans votre système d'exploitation hôte et utiliser les 3 autres cœurs restants.
Hôte avec 4 CPU, invité attribué 4 CPU
- Machine hôte exécutant 4 cœurs physiques
- Système d'exploitation client dans la machine virtuelle attribué 4 cœurs
Dans ce cas, vous pouvez exécuter des applications multi-thread qui s'adaptent bien dans la machine virtuelle invitée et qui peuvent utiliser pleinement les 4 CPUs virtuels. VirtualBox utilisera 4 cœurs physiques pour traiter les tâches planifiées dans la VM et par conséquent, la charge CPU de votre hôte pourrait atteindre un maximum de 100% d'utilisation.
Quel paramétrage devriez-vous choisir?
La réponse à cette question dépend beaucoup de ce que vous voulez faire. Dans certains cas, il peut être utile d'attribuer tous les cœurs à une VM ou même d'exécuter plusieurs VM, chacune ayant le nombre total de CPUs attribués. Dans de tels cas, une VM peut utiliser pleinement toute la puissance de traitement de l'hôte. Si plus de CPUs sont attribués aux VM que ce qui est réellement présent, les VMs seront impactées par la charge sur les différentes VM. Pour éviter cela, vous pourriez dédier certains cœurs à des VM spécifiques. Par exemple, exécuter 2 VMs avec 2 CPUs attribués chacun sur un nœud à 4 cœurs pourrait aider chaque VM à disposer de 2 CPUs dédiés (en supposant qu'il n'y a pas de charge imposée par le système d'exploitation hôte qui prend une partie de la puissance de traitement également).
Est-ce que cela a un impact négatif sur mon hôte d'attribuer tous les cœurs à une VM?
Encore une fois, cela dépend du logiciel utilisé. Si vous exécutez une VM qui est inactive (aucun programme intensif en cours d'exécution), la charge imposée par cette VM sera proche de 0%. Vous pouvez même exécuter 10 VM en parallèle et toujours constater une charge CPU de l'hôte proche de 0% si toutes les VM sont inactives.
Comment le CPU se comporte-t-il en cas de charge inégale?
Eh bien, la distribution de la charge CPU dépend fortement d'un composant intégré spécifique à chaque système d'exploitation appelé le planificateur. Pour Windows XP, le planificateur essayait de répartir équitablement la charge sur tous les cœurs du CPU. Ainsi, l'exécution d'une tâche monothread à pleine charge sur un CPU quadricœur aurait donné une charge d'environ 25% sur chaque cœur.
Malheureusement, cela s'est avéré être préjudiciable à la gestion moderne de l'alimentation du CPU. Pour les systèmes modernes, il est même préférable qu'un seul cœur soit chargé jusqu'à 100% avant que le deuxième cœur n'intervienne. La raison en est que tant qu'il n'y a pas suffisamment de charge pour utiliser pleinement un cœur, les autres cœurs peuvent rester en mode veille profonde pour économiser de l'énergie et réduire la dissipation thermique.
Pour certains CPUs comme les Intel Core i-Series et les récents AMD (Bulldozer), cela devient encore plus intéressant car en cas d'utilisation de seulement un sous-ensemble des cœurs, les cœurs inutilisés sont éteints. Cela réduit la consommation d'énergie du CPU. Les deux (Intel et AMD) commencent alors à utiliser le budget thermique et de consommation d'énergie pour overclocker les cœurs qui sont actifs. Ainsi, cela peut donner un coup de pouce aux applications monothread (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 de "boost" n'ont qu'un faible effet sur la puissance de traitement puisque la situation de "tous les cœurs actifs" est exactement la situation pour laquelle le CPU a été conçu. Mais lorsque vous éteignez certains cœurs, les cœurs restants peuvent fonctionner en mode overclocké sans que la puce ne chauffe davantage (ou ne consomme plus d'énergie) que si tous les cœurs étaient actifs.
Ainsi, la réponse est que votre Core i7 gère très bien les charges inégales sur des cœurs individuels et pourrait même offrir un coup de pouce aux applications monothreads. Cependant, ce coup de pouce se situe dans une fourchette de quelques pour cent, alors que les applications multi-thread qui peuvent répartir la charge sur plusieurs cœurs CPU peuvent être boostées par des facteurs (x2 sur un double cœur, 4x sur un quadri-coeur...) dans le meilleur des cas. Ainsi, le multitâche offre toujours plus de puissance en termes de puissance CPU combinée que le monoprocesseur associé à l'augmentation de la fréquence d'horloge.
Dans un commentaire ailleurs, l'expert de VirtualBox "mpack" écrit :
Dans la vie réelle, de nombreuses opérations sont liées au disque ou au réseau. Seule une minorité d'opérations est liée au processeur.
Plus vous créez de cœurs pour votre machine virtuelle, plus ces cœurs causeront des surcharges (en raison des changements de contexte).
En pratique, le choix idéal est généralement d'attribuer deux cœurs à chaque machine virtuelle.
Si vous devez exécuter des tâches intensives en CPU toute la journée, comme l'encodage vidéo, ne les exécutez pas dans une machine virtuelle. Exécutez-les sur le système hôte : ils s'exécuteront plus rapidement là-bas.