Gibt es ein Windows-Äquivalent zu "CPU-Diebstahlzeit" unter Unix?

24

Um die Genauigkeit der Leistungsüberwachung auf Virtualisierungsplattformen zu bewerten, ist die CPU-Diebstahlszeit zu einer immer relevanteren Messgröße geworden - siehe EC2-Überwachung: Der Fall der gestohlenen CPU enthält eine aufschlussreiche Zusammenfassung im Kontext von Amazon EC2 und IBMs Artikel zur CPU-Zeit, in der a Detailliertere technische Erklärung (einschließlich Abbildungen) des Konzepts:

Die Diebstahlzeit ist der Prozentsatz der Zeit, die eine virtuelle CPU auf eine reale CPU wartet, während der Hypervisor einen anderen virtuellen Prozessor bedient.

Dementsprechend ist es heutzutage in den meisten verwandten Unix / Linux-Überwachungstools verfügbar - siehe z. B. Spalten % steal oder st in saroder top:

st - Diebstahlzeit
Die Menge der CPU, die der Hypervisor für andere Aufgaben (z. B. das Ausführen einer anderen virtuellen Maschine) von dieser virtuellen Maschine "gestohlen" hat.

Ich konnte jedoch nicht herausfinden, wie dieselbe Metrik unter Windows erfasst werden kann. Ist dies bereits möglich? (Ideal für die Windows 2008 Server R2 AMIs auf EC2 und natürlich über einen entsprechenden Windows-Leistungsindikator .)

Steffen Opel
quelle

Antworten:

33

Bearbeiten: Aktualisierung am 1. Oktober 2013 - Einige meiner ursprünglichen Antworten sind inzwischen veraltet.

Ich bin mir nicht sicher, ob Sie noch auf dieser Site aktiv sind oder ob Sie dies sehen werden, aber ich wollte, dass Sie wissen, dass ich diese Frage heute gelesen habe und es mich faszinierte, und deshalb habe ich den ganzen Tag damit verbracht (wann ich sollte) Ich habe an Hyper-V- und Windows-Interna geforscht und mich sogar mit den Konzepten der Virtualisierung selbst befasst, in der Hoffnung, dass ich bereit bin, Ihre Frage zu beantworten.

Lassen Sie mich vorwegnehmen, dass ich aus der Sicht von Hyper-V als Virtualisierungsplattform komme, da ich dort die meiste Erfahrung habe. Auch wenn es, wie wir wissen, bestimmte Grundsätze der Virtualisierung gibt, von denen nicht abgewichen werden kann, haben Microsoft, VMware und Xen unterschiedliche Strategien für das Design ihrer Hypervisoren.

Das ist das Erste, was Ihre Frage herausfordert. Sie stellen Ihre Frage so, als ob sie hypervisor-agnostisch wäre, obwohl dies in Wahrheit nicht der Fall ist. Amazon EC2 verwendet beispielsweise den Xen-Hypervisor und die Metrik "CPU-Diebstahlzeit", die Sie in der Ausgabe eines topBefehls sehen, der von einer Linux-VM ausgegeben wird, die auf diesem Hypervisor ausgeführt wird, ist ein Ergebnis der Integrationsdienste, die auf diesem Gastbetriebssystem installiert sind (oder virtualisierungsfähige Tools auf dem Gast) in Verbindung mit Daten, die von diesem bestimmten Hypervisor bereitgestellt werden.

Lassen Sie mich zunächst Ihre Frage beantworten: Es gibt keine Möglichkeit, von einer virtuellen Maschine unter Windows aus zu erkennen, wie viel Zeit die Prozessoren der physischen Maschine, auf der der Hypervisor ausgeführt wird, für andere Aufgaben aufwenden, es sei denn, die bestimmten virtuellen Tools / Dienstleistungen oder virtualisierungsfähige Werkzeuge für Ihre Hypervisor sind in dem Gastsystem installiert VM undDer bestimmte Hypervisor, auf dem der Gast ausgeführt wird, macht diese Daten für den Gast verfügbar. Selbst ein Windows-Gast, der auf einem Hyper-V-Hypervisor ausgeführt wird, hat keinen sofortigen Zugriff auf Informationen zu der Zeit, die die physischen Prozessoren auf dem Hypervisor für andere Aufgaben aufgewendet haben. (Um voretaq7 zu zitieren, etwas, das "die vierte Mauer durchbricht".) Auch wenn Windows-Client- und -Server-Betriebssysteme als virtualisierte Gäste in Hyper-V mit den richtigen installierten Integrationsdiensten / -tools "Enlightenments" (buchstäblich Kernel) verwenden Code Änderungen speziell für VMs hergestellt) , die wesentlich bei der Verwendung der Ressourcen eines physischen Hosts in ihrer Leistung steigern, ist das Endergebnis , dass der Hypervisor nicht habendem Gastbetriebssystem mehr Informationen zu geben, als es möchte. Das heißt nicht der Hypervisor nicht hat , um einen Gast - VM zu sagen , was sonst ist es neben der Wartung , dass VM zu tun ... es sei denn , es will. Und diese Informationen darüber, was die physischen Prozessoren sonst noch tun, sind erforderlich, um eine Metrik aus Sicht der VM abzuleiten, z. B. "CPU-Diebstahlzeit: Der Prozentsatz der Zeit, die die vCPU auf eine physische CPU wartet."

Wie kann das Gastbetriebssystem das wissen, wenn es nicht einmal merkt, dass es tatsächlich virtualisiert ist?

Mit anderen Worten, ohne die richtigen Integrationstools, die auf dem Gast installiert sind, wird das Gastbetriebssystem nicht einmal wissen, dass es sich bei seiner CPU tatsächlich um eine v- CPU handelt. Es wird nicht einmal bekannt sein, dass es eine andere Kraft gibt, die außerhalb von sich selbst CPU-Zyklen "stiehlt", daher ist diese Metrik auf der Gast-VM nicht vorhanden.

VMware hat damit begonnen, diese Daten sowohl Windows-Gästen als auch ESXi 5.0 zur Verfügung zu stellen. VMware-Integrationstools müssen auch auf dem Gast aktualisiert werden. Hier ist eine Referenz ; Sie bezeichnen es als "CPU Stolen Time".

Ein Hypervisor wie Hyper-V bietet Gästen keinen direkten Zugriff auf physische Ressourcen wie physische Prozessoren oder Prozessorkerne. Stattdessen gibt der Hypervisor ihnen vDevs - virtuelle Geräte - wie z. B. vCPUs.

Ein gutes Beispiel für die folgenden Gründe: Angenommen, ein Gastbetriebssystem einer virtuellen Maschine ruft auf, um den TLB (Translation Look-Aside Buffer) zu leeren, der eine physische Komponente einer physischen CPU ist. Wenn das Gastbetriebssystem den gesamten TLB auf einem physischen Prozessor löschen könnte , hätte dies negative Auswirkungen auf die Leistung aller anderen VMs, die ebenfalls denselben physischen TLB gemeinsam nutzen. Unter Windows wird dieser Aufruf im Gastbetriebssystem in einen "Hypercall" - oder "Enlightened" -Aufruf übersetzt, der vom Hypervisor so interpretiert wird, dass nur der für diese virtuelle Maschine relevante Abschnitt des TLB gelöscht wird.


(Interessanterweise deutet dies darauf hin, dass Gast-VMs, die nicht über die richtigen Integrationstools und / oder -dienste verfügen, möglicherweise die Leistung aller anderen VMs auf demselben Host beeinträchtigen können, dies liegt jedoch völlig außerhalb dieses Themas .)


Alles , was zu sagen , dass Sie können immer noch die Zeit in einer Hyper-V - Host erkennen , dass ein virtueller Prozessor wartet ausgegeben für einen echten Prozessor zur Verfügung , so zu werden , dass es geplant konnte laufen. Sie können diese Daten jedoch nur auf einem Windows Hyper-V-Hypervisor anzeigen. Wenn es möglich ist, dies in anderen Hypervisoren zu sehen, fordere ich andere auf, uns mitzuteilen, wie dies in diesem Hypervisor zu sehen ist und ob es den Gästen ausgesetzt ist. (Edit 01.10.2013 Danke, evilensky, dass du genau das getan hast!)

Mein Testcomputer war Hyper-V Server 2012, die kostenlose Version von Server 2012, auf der nur Core und die Hyper-V-Rolle ausgeführt werden. Es ist praktisch dasselbe wie bei jedem Windows Server 2012, auf dem Hyper-V ausgeführt wird.

Starten Sie Perfmon auf Ihrer übergeordneten Partition, auch bekannt als physischer Host. Laden Sie diesen Zähler:

Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*

Sie werden feststellen, dass für jede virtuelle Maschine auf diesem Hypervisor eine Instanz dieses Indikators sowie _Total vorhanden ist. Die Microsoft-Definition dieses Perfmon-Zählers lautet:

Die durchschnittliche Zeit (in Nanosekunden), die darauf gewartet wurde, dass ein virtueller Prozessor auf einen logischen Prozessor verteilt wird.

Natürlich möchten Sie, dass diese Zahl so niedrig wie möglich ist. Warten ist für Computer fast nie eine gute Sache.

Andere Leistungsindikatoren auf dem Hypervisor , dass Sie möchten , untersuchen sind Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time, % Hypervisor Run Timeund % Total Run Time. Diese Leistungsindikatoren geben Ihnen die Prozentsätze an, anhand derer Sie beispielsweise ermitteln können, wie viel Zeit die "echten" Prozessoren für andere Aufgaben als die Wartung einer VM oder aller VMs aufwenden.

Zusammenfassend hängt die Metrik, nach der Sie in einer virtuellen Gastmaschine suchen, von dem Hypervisor ab, auf dem sie ausgeführt wird, ob dieser Hypervisor die Daten darüber bereitstellt, wie er seine Zeit abgesehen von der Wartung dieser VM verbringt, und ob der Gast Das Betriebssystem verfügt über die richtigen Tools / Dienste / Treiber für die Virtualisierungsintegration, um zu erkennen, dass der Hypervisor diese Daten zur Verfügung stellt.

Ich kenne keine Möglichkeit, auf einem Windows-Gast, installierten oder nicht installierten Integrationstools, festzustellen, wie viel Zeit (in Sekunden oder Prozent) der VM-Host für die Wartung aufgewendet hat oder nicht, je nach der Gesamtzeit des physischen Prozessors. (Edit 10/1/2013: ESXi 5.0 oder höher macht diese Daten über die Integrationstools für die Gast-VM verfügbar. Auf Hyper-V ist jedoch noch nichts vorhanden.)

Ryan Ries
quelle
1
+1 - epische Antwort ist episch
Mark Henderson
1
+1 für die gründliche Erkundung in der Tat sehr geschätzt. In Bezug auf EC2 läuft dies anscheinend auf Unix / Linux-Gäste hinaus, die im Xen paravirtualModus ausgeführt werden. Dies ist eine paravirtualisierte Domäne (dh keine vollständige Virtualisierung, das Gastbetriebssystem wird so geändert, dass es auf dem Host ausgeführt wird), bei der Zeit zum Stehlen verfügbar ist, im Vergleich zu Windows / FreeBSD / ... Gäste Xen HVM, die in einer Hardware-emulierten Domäne ausgeführt werden (dh das Gastbetriebssystem ist unverändert, um auf dem Host ausgeführt zu werden), wo dies anscheinend nicht der Fall ist. Lies ich dich richtig, dass es irgendwann hinzugefügt werden könnte?
Steffen Opel
2
Theoretisch könnte es aber nicht den Atem anhalten. Wie ich bereits sagte, müssen der herstellerspezifische Hypervisor und das herstellerspezifische Gastbetriebssystem koordinierte Anstrengungen unternehmen, um diese Daten über den physischen Host innerhalb der Gast-VM verfügbar und zugänglich zu machen. wiki.xen.org/wiki/Xen_Kernel_Feature_Matrix
Ryan Ries
2
Tangential: VMware-Hypervisoren bezeichnen das Steal-Team als Bereitschaftszeit - die Zeitspanne, die eine virtuelle CPU darauf wartet, von einer physischen Ressource bedient zu werden.
Yolo Perdiem
1
Dies ist ein bekanntes Thema auf dem Mainframe. Die Metrik ist seit Jahrzehnten verfügbar. Es heißt "Warte auf CPU".
2

FWIW, ich habe gerade die Perfmon-Leistungsindikatoren eines Windows 2008r2-Servers unter Hyper-V durchgesehen und nichts im Zusammenhang mit Zeitraub (oder überhaupt Virtualisierung) festgestellt.

uSlackr
quelle
Vielen Dank für die Überprüfung - anscheinend sollten Virtualization Counters für Hyper-V tatsächlich verfügbar sein, müssen sie möglicherweise zuerst installiert / aktiviert werden? Ich bin jedoch immer noch nicht in der Lage, eine ähnliche / verwandte Metrik unter diesen zu identifizieren / abzuleiten.
Steffen Opel