Virtuelle Maschinen in jedem mir bekannten Hypervisor können zusätzliche virtuelle CPUs verwenden, auf denen zusätzliche gleichzeitige Ausführungsthreads geplant werden können.
Es ist genau diese Abstraktionsebene zwischen physischer Maschine und virtueller Maschine, die dazu führt, dass sie nicht so funktioniert, wie Sie es beschreiben. Der VM ist nicht bekannt, wie viele Kerne die physische Maschine hat. Die VM "sieht" die physischen CPUs (oder Kerne) auf dem physischen Computer nicht. Der Hypervisor gibt der VM an, wie viele virtuelle CPUs es gibt, und das Gastbetriebssystem verwendet diese virtuellen CPUs, um zusätzliche gleichzeitige Threads zu planen. Die Gesamtzahl der virtuellen CPUs, die der Hypervisor an die virtuellen Maschinen verteilt, kann sogar die Anzahl der physischen CPUs überschreiten. Kerne in der Maschine.
Anders gesagt, eine virtuelle Maschine plant, wenn eine einzelne vCPU zugewiesen wird, ihre Threads so, als ob sie nur eine CPU hätte. Es spielt keine Rolle, wie viele Kerne sich in der zugrunde liegenden physischen Maschine befinden. (Es ist jedoch anzumerken, dass die physische Maschine möglicherweise einen VM-Thread auf einem physischen Kern für ein Thread-Quantum oder eine Zeitscheibe plant und ihn dann bei der nächsten Ausführung auf einem anderen physischen Kern ausführt. Die virtuelle Maschine verfügt über Keine Ahnung, dass irgendetwas davon passiert. Alles was es weiß ist, dass es immer nur einen Thread nach dem anderen planen kann, da es nur eine virtuelle CPU hat.)
Und lassen Sie uns unsere Bedingungen hier sehr klar definieren. Sie weisen VMs vCPUs oder virtuelle CPUs zu, nicht "Kernen". Kerne (von denen ich annehme, dass Sie physische Verarbeitungseinheiten meinen, die sich einen einzelnen physischen Socket teilen) entsprechen nicht den vCPUs. Es gibt eine Abstraktionsebene zwischen ihnen. Wenn einer VM nur 1 vCPU zugewiesen ist, kann jeweils nur ein Thread für die Ausführung geplant werden. Aus diesem Grund wird Ihre VM mit 2 bis 4 zugewiesenen virtuellen CPUs schneller ausgeführt, da jetzt mehr als ein Thread für die gleichzeitige Ausführung geplant werden kann.
Es gibt jedoch definitiv ein Gesetz zur Verringerung der Rendite, da eine übermäßige Anzahl virtueller CPUs immer höhere Overhead-Kosten für Dinge wie Synchronisation usw. verursacht.
Es gibt geringfügige Unterschiede zwischen der Planung der Ausführung von Threads für virtuelle Maschinen durch Hyper-V- und VMware-Hypervisoren, und sie unterscheiden sich in ihrer Herangehensweise an die "Überzeichnung" physischer Ressourcen. Dies ist jedoch zunächst ein gutes allgemeines Konzept.