Bevor wir fortfahren, lesen Sie bitte Warum zeigt die Windows 10-VM auf QEMU-KVM immer eine CPU-Auslastung von 100 % an? Das gleiche Problem gilt für Windows10 VM auf OpenStack, wodurch es langsam wird und immer 100 % CPU-Auslastung verwendet. Dieser Artikel zeigt, wie OpenStack konfiguriert wird, um eine Windows10-VM auf einem Multicore-Prozessor auszuführen, der alle Kerne pro CPU nutzt.
Setup-Info
KVM-Version: 2.12.0
Gastbetriebssystem: Windows10-Startseite
HOST-CPU: AMD Opteron(TM) Prozessor 6128 mit
- CPU-Modell:x86_64
- CPU(s):16
- CPU-Frequenz:2000 MHz
- CPU-Sockel:1
- Kerne pro Sockel:4
- Thread(s) pro Kern:1
- NUMA-Zelle(n):4
- Speichergröße:65771872 KiB
Wie man OpenStack konfiguriert, um Windows10 VM auf einem Multicore-Prozessor auszuführen
Moderne Server-CPUs wie oben verwenden die NUMA-Architektur (Non-Uniform Memory Access). Das folgende Bild zeigt den Vergleich von UMA mit NUMA. Die NUMA-Architektur bietet separaten Speicher für jeden Prozessor (im Gegensatz zu UMA, wo alle Prozessoren über einen Bus auf gemeinsam genutzten Speicher zugreifen). Gleichzeitig kann ein Prozessor über einen gemeinsam genutzten Bus auf Speicher zugreifen, der anderen Prozessoren gehört. Eine CPU hat den Leistungsvorteil, dass sie schneller auf ihren eigenen lokalen Speicher zugreift als auf anderen Speicher auf einem Multiprozessor.
PIC-Höflichkeit:www.nakivo.com
Wenn Sie VMs auf NUMA-Hosts ausführen, wie in der folgenden Abbildung gezeigt, ist es wichtig, dass sich die vCPUs, die Prozesse ausführen, auf demselben NUMA-Knoten befinden wie der von diesen Prozessen verwendete Arbeitsspeicher. Dadurch wird sichergestellt, dass alle Speicherzugriffe lokal auf dem Knoten erfolgen und somit nicht die begrenzte knotenübergreifende Speicherbandbreite verbrauchen, wodurch die Latenz für Speicherzugriffe erhöht wird.
Die OpenStack-Konfiguration der NUMA-Topologie- und CPU-Pinning-Funktionen bietet eine umfassende Kontrolle darüber, wie Instanzen auf Hypervisor-CPUs ausgeführt werden, und die Topologie virtueller CPUs, die Instanzen zur Verfügung stehen.
Konfigurieren von Flavors mit NUMA-Knotenplatzierung und Topologie
Mit der folgenden Konfiguration ist der libvirt-Treiber in der Lage, eine intelligente CPU/CORES-Platzierung für Gäste vorzunehmen. Dies erhöht die effektive Nutzung von Rechenressourcen und verringert die Latenz, indem knotenübergreifende Speicherzugriffe durch Gäste vermieden werden. Um die Spezifikation der Topologie zu unterstützen, müssen Sie dem Flavor zusätzliche Spezifikationen hinzufügen. Openstack ermöglicht es, die CPU-Topologie der Prozessoren in der virtuellen Maschine mithilfe von Eigenschaften zu definieren.
$ openstack flavor set FLAVOR-NAME \ --property hw:cpu_sockets=FLAVOR-SOCKETS \ --property hw:cpu_cores=FLAVOR-CORES \ --property hw:cpu_threads=FLAVOR-THREADS \
Wo:
- FLAVOR-SOCKETS: (Ganzzahl) Die Anzahl der Sockets für die Gast-VM. Standardmäßig ist dies auf die Anzahl der angeforderten vCPUs eingestellt.
- FLAVOR-CORES:(Ganzzahl) Die Anzahl der Kerne pro Socket für die Gast-VM. Standardmäßig ist diese auf 1 gesetzt.
- FLAVOR-THREADS:(Ganzzahl) Die Anzahl der Threads pro Kern für die Gast-VM. Standardmäßig ist diese auf 1 gesetzt.
Konfigurieren Sie niemals eine höhere Anzahl virtueller Kerne auf jeder VM als die Anzahl realer Kerne, die auf dem Hostcomputer verfügbar sind.
Für meine Topologie ist unten das Flavor-Set:
$ openstack flavor set Windows10 \ --property hw:cpu_sockets=1 \ --property hw:cpu_cores=4 \ --property hw:cpu_threads=1 \