In allen Virtualisierung Projekten taucht immer wieder die gleiche Frage auf, wie verteilt man die virtuellen Ressourcen optimal, wie viele virtuelle Maschinen können auf einen einzigen Host performant laufen? Die einzige richtige Antwort auf diese Fragen, es kommt drauf an. Es gibt viele Faktoren, die eine wichtige Rolle dabei spielen.
Als erstes erläutern wir die grundlegende Begriffe: Prozessor, Core, HyperThreading, Logischer Prozessor und vCPU
1. Ein Prozessor oder CPU (Central Processing Unit) ist eigentlich das, was in einen Socket auf einem Mainboard reingesteckt wird. Mehr dazu auf Wiki
Ja nach Geräteart, kann es einen Prozessor (Smartphone, Tablet-PC, Laptop) oder mehrere (Server, Workstation) Prozessoren eingesetzt werden. Ein Prozessor ist immer eine physische CPU.
2. Core - Die kontinuierliche Weiterentwicklung der Fertigungstechnologie hat es möglich gemacht, dass die Prozessoren bzw. Transistoren immer kleiner wurden, sodass auf einem Chip mehrere Prozessoren verbaut werden. Ein Core ist ein physischer Prozessor, kein Teil von einem Prozessor.
3. Hyper-Threading ist eine Technologie, die die Duplizierung von bestimmten Komponenten (Registersätzen) ermöglicht, wobei die ALUs (Arithmetisch-logische Einheiten) einzeln bleiben. Das bedeutet, dass zu einem bestimmten Zeitpunkt nur ein Thread die Rechenoperation ausführen kann. Die Hyper-Threading-CPUs sind eigentlich logische CPUs
Beispiel der HyperTreading Technologie:
4. Logischer Prozessor ist einer von oben genannten Punkten. Die CPUs, die das Betriebssystem sieht, sind die logischen Prozessoren.
Für die Vereinfachung benennen wir die beschriebenen wie folgt:
X - ist die Anzahl der CPU
Y - ist die Anzahl der Core pro CPU
Z - ist die Anzahl von Hyper-Threads
S - ist die Summe der logischen Prozessoren. S = (X x Y) x 2 (Hyper-Threads)
5. vCPU - ist ein CPU innerhalb einer VM
Verhältnis vCPU zu physischer CPU
Eine CPU-Überbuchung ist die Aufteilung von logischen CPUs in die virtuelle CPUs. z.B. CPU-Überbuchungsverhältnis 5:1 bedeutet, dass die fünf vCPUs einem logischen CPU zugewiesen werden.
So werden die Anzahl der verfügbaren physischen Kerne (pCPU) berechnet:
(Anzahl Prozessorsockel) X (Anzahl Kerne/Prozessor) = Anzahl Physische Prozessoren (pCPU)
Die Berechnung von Hyper-Threading-CPUs wird oft heftig diskutiert. Es gibt zwei unterschiedliche Meinungen zu dem Thema.
1. Es wird es empfohlen, die Hyper-Threaded CPUs bei der Berechnung zu ignorieren.
Beispiel: ein Host mit zwei Octa-Core-Prozessoren hat 16 physischer CPU. (2 x 8 = 16)
2. Die Hyper-Threads werden bei der Berechnung als vollwertige CPUs gesehen.
Beispiel: ein Host mit zwei Octa-Core-Prozessoren mit eingeschalteter Hyper-Threading-Technologie hat 32 logischer CPUs. (2 x 8) x 2 = 32
Welches Verhältnis ist wirklich optimal lässt sich nicht pauschal beantworten und ist von dem Workload abhängig. Sicherlich wird Verhältnis bei einem gehosteten Datenbank / Exchange oder Skype-Server anders sein (2:1), als bei einer Desktop-Virtualisierung (6:1 oder höher).
Pauschalisiert hat sich ein Verhältnis 4:1 mittlerweile als Best Practice erwiesen.
Die Leistung bei Windows-Betriebssystemen steigt nicht linear. Mehr vCPU kann auch negative Auswirkung haben. Wenn Sie z.B. einer VM vier vCPU zuweisen, werden für diese virtuelle Maschine bei CPU Zyklen auch vier Core zur Verfügung gestellt, auch dann wenn nur zwei davon benötigt werden. Fazit: Weisen einer virtuellen Maschine so viele vCPU zu, die diese VM wirklich braucht.
Faustregeln des Citrix Consulting Services
Wenn Sie mutig genug sind, können Sie die pauschalierten Werte des Citrix Consulting Services verwenden, sogenannte Rule of 5 and 10
Die Regeln sind einfach:
- Anzahl der physischen Kerne * 5 = Anzahl der XenDesktop-VMs
- Anzahl der physischen Kerne * 10 = Anzahl der User Sessions eines XenApp Servers.
Eine detalierte Beschreibung finden Sie in diesem Blogbeitrag von Nich Rintalan: Citrix Scalability — The Rule of 5 and 10
Metriken-Überwachung
Die Überwachung der folgenden Metriken kann bei der Einschätzung den realen CPU-, Memory-Bedarf helfen:
Hypervisor:
- vCPU Usage (Auslastung) (%)
- CPU Queue Length (Warteschlangenlänge)
- CPU Ready Time
- CPU Readiness
- vCPU/pCPU Ratio
- Memory Utilization (Used/Free) (%)
- Memory Swapping (Used/Free) (%)
- Memory Ballooning (Used/Free) (%)
VDA / User Session
- vCPU Usage (Auslastung) (%)
- vCPU Usage pro Applikation (%)
- vCPU Usage pro User (%)
- Memory Utilization (Used/Free) (%)
- Memory Utilization pro User (Used/Free) (%)
- Memory Swapping (Used/Free) (%)
Ein paar Tipps zum Thema:
Performance Tuning Guidelines for Windows Server 2012 R2
Best Practices for Oversubscription of CPU, Memory and Storage in vSphere Virtual Environments