none
Resourcensteuerung bei Server 2008 R2 Hypervisor RRS feed

  • Frage

  • Hallo,

    wir haben bei uns einen Server 2008 R2 Hypervisor mit zwei CPUs mit jeweils 8 Kernen und aktiviertem Hyperthreading.

    Wenn ich es richtig verstehe, stehen mir bei 32 logischen CPU Kernen 256 Threads (32*8) zur Verfügung und jede vCPU einer VM belegt einen dieser Threads. Nun haben wir bei einigen VM´s, die als Datenbankserver und Webserver benutzt werden, ein CPU Performance Problem. Macht es in diesem Zusammenhang Sinn, bei insgesamt 52 vCPU´s die Ressourcensteuerung des Hypervisors zu verwenden, um CPU Ressourcen für bestimmte VM´s zu reservieren oder wird das in diesem Zusammenhang nicht notwendig? Gibt es sonstige Dinge die man bei der Ressourcensteuerung beachten muss und macht es Sinn das XML File einer VM zu bearbeiten, um dieser mehr als vier vCPU´s zuzuweisen, auch wenn das nicht unterstützt wird? Habt ihr eventuell noch andere Ideen wie ich in einer 2008er Umgebung mehr CPU Leistung für VM´s erreichen kann?

    Mittwoch, 11. Mai 2016 16:03

Alle Antworten

  • Moin,

    wie kommst Du auf 256 Threads? Richtig ist, dass man grundsätzlich die physische CPU überbuchen kann. Welches Verhältnis von Host-Threads zu VM-Threads dabei zu verwenden ist, hängt sehr stark vom Workload ab.

    In der Regel ist 'viel hilft viel' der falsche Ansatz bei der Zuweisung von vCPUs. Hier ist eher der Weg 'so viel nötig, aber so wenig wie möglich' hilfreich.

    Besonders Datenbankserver könne sehr unfreundlich auf stark überbuchte Host CPUs reagieren.

    Bei 32 Host Threads zu 52 vCPU sehe ich oberflächlich betrachtet kein Problem.

    • Woran machst Du die CPU als Ursache fest?
    • Hast Du das Bios und das Host OS auf maximale Performance/Höchstleistung eingestellt?
    • Was für physische CPU sind verbaut?
    • Wie viel RAM steckt in dem Server? Wieviel RAM hat der DB Gast? Eventuell gibt es auch ein NUMA Problem
    • Was für eine DB läuft auf welchem Gast OS?

    This posting is provided AS IS with no warranties.

    Mittwoch, 11. Mai 2016 16:34
  • Moin,

    ja, der Frage nach der Zahl 256 kann ich mich nur anschließen. Du hast 2 (sockets) x 8 (kernel) x 2 (HT) = 32 logische CPUs am Start. Ziehe zwei davon ab für das Management-OS, sind wir bei 30.

    Die Frage "CPU overcommitment ja oder nein" läßt sich nie pauschal beantworten. Man sollte aber im Hinterkopf behalten, dass das Overcommitment um so mehr weh tut, je mehr vCPUs die VMs jeweils haben. Beispiel:

    1. 60 VMs mit jeweils einer vCPU, alle rechnen was, so dass die Zyklen auch tatsächlich abgerufen werden. Dann Rechenen

    --- im Takt 1 die ersten 30,

    --- im Takt 2 die zweiten 30

    --- usw. Stark vereinfacht kann man sagen, dass jede VM eine CPU hat, deren Taktfrequenz halb so hoch ist wie in der Physik.

    2. 15 VMs mit jeweils 4 vCPUs, also wieder das Doppelte der Physik. Aber:

    --- im Takt 1 rechnen die Maschinen 1-7, zwei logische CPUs machen nichts

    --- im Takt 2 rechnen die Maschinen 8-14

    --- im Takt 3 rechnet die Maschine 15 sowie 1-6

    --- im Takt 4 rechnen 7-13 usw. usw.

    Somit stehen jeder VM zwar vier CPU-Kerne zur Verfügung, deren Taktfrequenz ist aber nur ein Drittel der Physik.

    Wenn Du Probleme mit der CPU-Auslastung hast, must Du messen, wo sie tatsächlich herrühren und ob das Overcommitment das Problem ist. Alles andere ist geraten. Hyper-V hat einen Haufen schöne Perfmon-Metriken wie z.B. "Hyper-V Logical Processor\% Guest Run Time" und "Hyper-V Logical Processor\CPU Wait Time for Dispatch" Hier eine schöne Übersicht: https://blogs.msdn.microsoft.com/tvoellm/2009/04/22/monitoring-hyper-v-performance/ . Manchmal sind CPU-Probleme aber keine CPU- sondern z.B. Storage-Probleme, da hilft auch PerfMon (Queue Length). Wenn Du eine SQL-DB in Deiner VM hast, gibt es dafür erstmal auch Ansätze furs Perfromance Troubleshooting, und da würde man sehen, welche Ressource der VM am meisten fehlt.

    EDIT: Um auf Deine Frage nach Reservierungen zurück zu kommen: Meiner Meinung nach lohnt sich das nur, wenn Du Echtzeitsysteme virtualisierst. Ansonsten machst Du die obere Takt-Rechnung ja noch krasser, weil die Kerne, die Du reserviert hast, aus der Rechnung für die anderen VMs rausfallen.


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de

    my personal blog (mostly German) -> http://it-pro-berlin.de

    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de

    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    Mittwoch, 11. Mai 2016 17:57
  • Moin,

    wie kommst Du auf 256 Threads? Richtig ist, dass man grundsätzlich die physische CPU überbuchen kann. Welches Verhältnis von Host-Threads zu VM-Threads dabei zu verwenden ist, hängt sehr stark vom Workload ab.

    In der Regel ist 'viel hilft viel' der falsche Ansatz bei der Zuweisung von vCPUs. Hier ist eher der Weg 'so viel nötig, aber so wenig wie möglich' hilfreich.

    Besonders Datenbankserver könne sehr unfreundlich auf stark überbuchte Host CPUs reagieren.

    Bei 32 Host Threads zu 52 vCPU sehe ich oberflächlich betrachtet kein Problem.

    • Woran machst Du die CPU als Ursache fest?
    • Hast Du das Bios und das Host OS auf maximale Performance/Höchstleistung eingestellt?
    • Was für physische CPU sind verbaut?
    • Wie viel RAM steckt in dem Server? Wieviel RAM hat der DB Gast? Eventuell gibt es auch ein NUMA Problem
    • Was für eine DB läuft auf welchem Gast OS?

    This posting is provided AS IS with no warranties.


    256 ist die maximale Anzahl an vCPUs, die er vergeben kann. 2x8x2x8 (Sockets x Cores x hyperthreading x 8). Hat natürlich nichts mit Threads zu tun ;)
    • Bearbeitet SADFR Mittwoch, 11. Mai 2016 18:57
    Mittwoch, 11. Mai 2016 18:55
  • 256 Threads ist natürlich quatsch. Ich meinte 256 vCPU´s.

    Das Problem, dass ich habe ist das zwei VM´s mit jeweils vier vCPU´s fast permanent zu 100% durch Services ausgelastet sind, die diese Ressourcen auch in Anspruch nehmen sollen ( einmal SQLServ.exe von einem SQL 2008 R2 Standard auf einem 2008 R2 Server und einmal eine Dokumenten Management Software).

    Die Auslastung des Hosts ist trotzdem gleich null. Wenn allerdings insgesamt 8 vCPU´s ausgelastet sind müssten doch auch 8 Kerne des Hosts voll ausgelastet sein.

    Der Host besitzt 176GB RAM und davon wurden dem DB Gast 30GB zugewiesen. Die CPU´s sind zwei Intel Xeon CPU E7 - 4820 @ 2GHz. 

    Deshalb die Frage nach der Ressourcensteuerung, ob wir damit den Maschinen die benötigte Performance reservieren sollten.

    Meinst du mit der Höchstleistungseinstellung beim Host die Energiesparoptionen oder gibt es noch andere Performance Optionen die ich grad übersehe? Macht es Sinn die Energiesparoptionen in den VM´s auf Höchstleistung zu stellen?


    • Bearbeitet TMSD Donnerstag, 12. Mai 2016 07:40
    Donnerstag, 12. Mai 2016 07:34
  • Ich meine die Performance Optionen im Bios (CPU ideling, Core Parking etc.) und die Windows Energieoptionen (Host und Gast).

    Die physische CPU ist auch nicht so der Renner für intensive Datenbanken. Datenbanken profitieren nicht nur von Threads sondern auch von der Geschwindigkeit.

    Zum Prozessor: schau Dir mal die Counter an, die Evgenij genannt hat.

    • Hyper-V Hypervisor Virtual Processor(*)\% Guest Run Time: To see processor utilization of virtual machines. This is better than looking at a processor within a virtual machine because clock calculation drift can affect the processor utilization information.
    • Hyper-V Hypervisor Logical Processor(*)\% Total Run Time: To see overall utilization of the processors, including host and virtual machines. The processor in Task Manager on the host shows only CPU use from the root partition itself.

    Zusätzlich würde ich auch einen Blick auf die CPU Queue von Host und Gast werfen. (System\Processor Queue Length)


    This posting is provided AS IS with no warranties.

    Donnerstag, 12. Mai 2016 08:34
  • Meinst du mit der Höchstleistungseinstellung beim Host die Energiesparoptionen oder gibt es noch andere Performance Optionen die ich grad übersehe? Macht es Sinn die Energiesparoptionen in den VM´s auf Höchstleistung zu stellen?


    Ja, das ist das, was gemeint ist - aber nicht in Windows sondern im BIOS!!!. Und das Phänomen "Gast CPU hoch / Host CPU niedrig" ist auch moistens genau darauf zurück zu führen.

    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de

    my personal blog (mostly German) -> http://it-pro-berlin.de

    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de

    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    Donnerstag, 12. Mai 2016 08:40