Warum erhöht die Erhöhung der Anzahl der logischen Prozessoren für eine von Hyper-V gehostete VM die Leistung dieser VM?

9

Nach meinem Verständnis erhalten virtuelle Maschinen (vorausgesetzt, sie Relative Weightsind gleich) einen gleichen Anteil am Prozessor.

Wenn der VM eine gewisse Verarbeitungszeit zugewiesen wird, sollte es keine Rolle spielen, ob die VM einen einzelnen Kern für die Verwendung oder mehrere Kerne sieht, da die Verarbeitung unabhängig von einem Array von Prozessoren auf dem Hyper-V-Host erfolgt. Wenn ich jedoch Number of logical processorsin Hyper-V die Einstellung für eine bestimmte VM von 1 auf 4 einstelle, sehe ich eine enorme Leistungssteigerung.

Die technischen Daten meines aktuellen Setups sind ungefähr:

  • Der Hyper-V-Host verfügt über 32 GB RAM, 24 logische Prozessoren (falsches Wort?) Und einige TB Speicherplatz.

  • VMs werden 6 GB RAM, 1 oder 4 Kerne, einige hundert GB Speicherplatz zugewiesen und 2008 R2 ausgeführt.

Ähnliches habe ich bei früheren Hyper-V-Setups erlebt.

Blackjack00
quelle

Antworten:

20

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.

Ryan Ries
quelle
7
@ Flapjack00 Nein ... das ist genau das Gegenteil von dem, was ich gerade gesagt habe. 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 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.
Ryan Ries
1
Ah! In diesem Fall kann eine mit 4 vCPUs konfigurierte VM 4 Threads gleichzeitig planen. Angenommen, mein Host verfügt über genügend vCPUs, könnten diese 4 Threads gleichzeitig verarbeitet werden?
Blackjack00
1
@ Flapjack00 "Vorausgesetzt, mein Host verfügt über genügend verfügbare vCPUs" - Der Host verfügt nicht über vCPUs, die VM jedoch. Der Host verfügt über Kerne (oder genauer gesagt über logische Prozessoren - ein einzelner Kern kann mehrere logische Prozessoren haben, wie beim Hyper-Threading), denen vCPUs zugewiesen werden.
BlueRaja
2
@ Dan, das ist ein spezifisches Problem für VMware. Hyper-V ist davon nicht betroffen.
Jake Oshins
1
Die "x vCpu erfordert Y-CPU-Sperren", die VMware hatte, wurde in ESX 3.5 entfernt, sodass dies für keinen modernen Hypervisor mehr gilt. Abgesehen davon sollten Sie darauf achten, Ihren VMs keine nicht benötigten Ressourcen zuzuweisen, und vCpus sind besonders wichtig. Wenn Sie zu viele davon verwenden, verlieren Sie insgesamt an Leistung.
Pause
3

Die Anzahl der zugewiesenen virtuellen CPUs spielt eine Rolle. Die in der VM ausgeführte Software ist sich nicht bewusst, dass sie sich in einer VM befindet und dass der Host mehr kann als die VM darstellt. Wenn Sie also Software ausführen, die mehrere CPU-Kerne nutzen kann, plant die Software in einer VM, der nur ein Kern zugewiesen ist, nur einen Kern für ihre Aufgaben, und auch die VM verwendet nur einen Host-Kern bei eine Zeit. Sobald Sie der VM mehr Kerne geben, kann die Software mehr parallele Aufgaben planen, die die CPU des Hosts für die VM plant.

Achten Sie darauf, VMs nicht zu viel zu geben, um keine Konflikte zu verursachen. Wenn eine VM mehr virtuelle Kerne als der Host hat, konkurriert die VM gegen sich selbst, und im Fall von geplanten Hypervisoren wie VMware wird die VM dies tun niemals in der Lage sein, überhaupt etwas auszuführen (die Option zur Gesamtzuordnung wird natürlich von der Verwaltungsebene blockiert).

dyasny
quelle