Frage Gibt es ein Windows-Äquivalent von Unix 'CPU Steal Time'?


Um die Genauigkeit der Leistungsüberwachung auf Virtualisierungsplattformen zu bewerten, hat der CPU stehlen Zeit hat sich zu einer zunehmend relevanten Metrik - siehe EC2-Überwachung: der Fall von gestohlener CPU für eine aufschlussreiche Zusammenfassung im Kontext von Amazon EC2 und IBM's Papier auf CPU-Zeitabrechnung für eine ausführlichere technische Erklärung (einschließlich Illustrationen) des Konzepts:

Die Stehlzeit ist der Prozentsatz der Zeit, die eine virtuelle CPU auf ein Real wartet   CPU, 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. Säulen %stehlen oder st im sar oder top:

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

Ich bin nicht in der Lage, herauszufinden, wie man die gleiche Metrik unter Windows aufnimmt, ist das schon möglich? (Ideal für die Windows 2008 Server R2-AMIs auf EC2 und über eine entsprechende Windows-Leistungsindikatoren Na sicher.)


22
2018-05-24 11:38


Ursprung




Antworten:


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

Ich bin mir nicht sicher, ob du noch auf dieser Seite aktiv bist oder dass du das sehen wirst, aber ich wollte, dass du weißt, dass ich diese Frage heute lese und es hat mich fasziniert, und so verbrachte ich den ganzen Tag (wenn ich sollte Ich habe an Hyper-V- und Windows-Interna geforscht und mich sogar mit den eigentlichen Konzepten der Virtualisierung beschäftigt, in der Hoffnung, dass ich bereit bin, Ihre Frage zu beantworten.

Lassen Sie mich vorweg sagen, dass ich aus der Sicht von Hyper-V als Virtualisierungsplattform komme, weil ich dort am meisten Erfahrung habe. Auch wenn es einige bekannte Aspekte der Virtualisierung gibt, von denen nicht abgewichen werden kann, haben Microsoft und VMware und Xen unterschiedliche Strategien für die Gestaltung ihrer Hypervisoren.

Das ist das Erste, was deine Frage herausfordert. Du stellst deine Frage so auf, als ob sie hypervisor-agnostisch wäre, in Wahrheit aber nicht. Amazon EC2 beispielsweise verwendet den Xen-Hypervisor und die Metrik "CPU Steal Time", die Sie in der Ausgabe von a finden top Befehl, der innerhalb einer Linux-VM ausgegeben wird, die auf diesem Hypervisor ausgeführt wird, ist ein Ergebnis der Integrationsdienste, die auf diesem Gastbetriebssystem (oder Tools zur Virtualisierung auf dem Gast) in Verbindung mit Daten dieses spezifischen Hypervisors installiert sind.

Lassen Sie mich zuerst Ihre Frage direkt beantworten: Es gibt keine Möglichkeit, von einer virtuellen Maschine, auf der Windows läuft, zu sehen, wie viel Zeit die Prozessoren der physischen Maschine, auf der der Hypervisor läuft, für andere Dinge ausgeben. es sei denn Die speziellen virtuellen Tools / Dienste oder Tools zur Virtualisierung für Ihren bestimmten Hypervisor sind in der Gast-VM installiert und Der bestimmte Hypervisor, auf dem der Gast ausgeführt wird, stellt diese Daten dem Gast zur Verfügung. Selbst ein Windows-Gast, der auf einem Hyper-V-Hypervisor ausgeführt wird, hat keinen unmittelbaren Zugriff auf Informationen über die Zeit, die die physischen Prozessoren auf dem Hypervisor für andere Aufgaben benötigen. (Zitat von voretaq7, etwas, das "die vierte Wand durchbricht".) Obwohl Windows-Client- und Server-Betriebssysteme, die als virtualisierte Gäste in Hyper-V mit den richtigen Integrationsdiensten / -tools ausgeführt werden, "Erklärungen" verwenden (was buchstäblich Kernel sind) Code-Änderungen, die speziell für VMs vorgenommen wurden), die ihre Leistung bei der Verwendung der Ressourcen eines physischen Hosts erheblich erhöhen, ist die Schlussfolgerung, dass der Hypervisor dies nicht tut haben um dem Gastbetriebssystem mehr Informationen zu geben, als es möchte. Das bedeutet, der Hypervisor nicht haben um einer Gast-VM mitzuteilen, was sie neben der Wartung dieser VM noch tut ... außer sie will es. Und diese Information darüber, was die physischen Prozessoren noch tun, ist notwendig, um eine Metrik aus der Perspektive der VM abzuleiten, wie z. B. "CPU Steal Time: der Prozentsatz der Zeit, die die vCPU auf eine physische CPU wartet".

Wie könnte das Gast-Betriebssystem das wissen, wenn es nicht einmal merkt, dass es tatsächlich virtualisiert wurde?

Mit anderen Worten, ohne die richtigen Integrationstools, die auf dem Gast installiert sind, wird das Gastbetriebssystem nicht einmal wissen, dass seine CPU tatsächlich eine ist vZENTRALPROZESSOR. Es wird nicht einmal wissen, dass eine andere Kraft außerhalb von sich CPU-Zyklen davon "stiehlt", daher wird diese Metrik nicht auf der Gast-VM existieren.

VMware hat 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 den Gästen keinen direkten Zugriff auf physische Ressourcen wie physische Prozessoren oder Prozessorkerne. Stattdessen gibt der Hypervisor ihnen vDevs - virtuelle Geräte - wie vCPUs.

Ein gutes Beispiel dafür: Sagen wir, ein Gast-Betriebssystem einer virtuellen Maschine führt den Aufruf aus, den TLB (Translation Look-Aside-Puffer) zu leeren, der eine physische Komponente einer physischen CPU ist. Wenn das Gastbetriebssystem das Löschen des ganz TLB auf einem physischen Prozessor, der negative Auswirkungen auf die Leistung aller anderen VMs hat, die denselben physischen TLB gemeinsam nutzen. Im Fall von Windows wird dieser Aufruf im Gastbetriebssystem in einen "hypercall" oder "erleuchteten" Aufruf übersetzt, der vom Hypervisor interpretiert wird, so dass nur der Abschnitt des TLB geleert wird, der für diese virtuelle Maschine relevant ist.


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


All das zu sagen, dass Sie können erkennen in einem Hyper-V-Host immer noch die Zeit, die ein virtueller Prozessor darauf verwendet hat, auf die Verfügbarkeit eines echten Prozessors zu warten, damit dieser für die Ausführung geplant werden kann. 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 zu sagen, wie man dies in diesem Hypervisor sieht und auch, wenn es den Gästen ausgesetzt ist. (Edit 01.10.2013 Vielen Dank evilensky dafür genau das!)

Meine Testmaschine 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 identisch mit 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 es für jede virtuelle Maschine auf diesem Hypervisor eine Instanz dieses Zählers sowie _Total gibt. Die Microsoft-Definition dieses Perfmon-Leistungsindikators ist:

Die durchschnittliche Zeit (in Nanosekunden), die darauf entfällt, dass ein virtueller Prozessor an einen logischen Prozessor gesendet wird.

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

Andere Leistungsindikatoren auf dem Hypervisor, den Sie untersuchen möchten, sind Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time, % Hypervisor Run Time, und % Total Run Time. Diese Zähler liefern Ihnen die Prozentsätze, die verwendet werden könnten, um Fakten zu ermitteln, wie z. B. wie viel Zeit die "echten" Prozessoren damit verbringen, Dinge zu tun andere als die Wartung einer VM oder aller VMs.

Die Metrik, nach der Sie in einer virtuellen Gastmaschine suchen, hängt also davon ab, auf welchem ​​Hypervisor sie ausgeführt wird, ob der Hypervisor die Daten darüber angibt, wie er seine Zeit verbringt, und nicht nur die VM Das Betriebssystem verfügt über die richtigen Werkzeuge / Dienste / Treiber für die Virtualisierungsintegration, um sich bewusst zu sein, dass der Hypervisor diese Daten zur Verfügung stellt.

Ich kenne keine Möglichkeit, auf einem Windows-Gast, Integrationstools installiert oder nicht, zu sehen, wie viel Zeit, in Sekunden oder Prozent, der Host der VM damit verbracht hat, sie zu bedienen oder nicht entsprechend der gesamten physischen Prozessorzeit zu warten.  (Edit 10/1/2013: ESXi 5.0 oder besser stellt diese Daten durch die Integrationstools der Gast-VM zur Verfügung. Immer noch nichts auf Hyper-V.)


32
2017-12-06 03:42



+1 - epische Antwort ist episch - Mark Henderson♦
+1 für die gründliche Exploration, sehr geschätzt. Was EC2 betrifft, so läuft das anscheinend auf Unix / Linux-Gäste hinaus Xen paravirtual Modus, der a ist paravirtualisierte Domain (d. h. nicht vollständige Virtualisierung, das Gastbetriebssystem wird modifiziert, um auf dem Host zu laufen), wo Zeit stehlen ist verfügbar, vs. Windows / FreeBSD / ... Gäste, die gerade laufen Xen HVM, die ein Hardware emulierte Domäne (d. h. das Gastbetriebssystem ist nicht modifiziert, um auf dem Host zu laufen), wo es offensichtlich nicht ist - also eine definitive negative Antwort, schätze, das ist was zählt. Lies ich dich richtig, dass es irgendwann hinzugefügt werden könnte? - Steffen Opel
Es könnte theoretisch, aber halten Sie nicht den Atem an. Wie bereits erwähnt, müssen der herstellerspezifische Hypervisor und das herstellerspezifische Gastbetriebssystem koordinierte Anstrengungen unternehmen, um die 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
Tangential: VMware Hypervisoren beziehen sich auf Team stehlen als Bereit Zeit - Die Zeit, die eine virtuelle CPU darauf wartet, von einer physischen Ressource bedient zu werden. - Yolo Perdiem
Dies ist ein bekanntes Thema auf dem Mainframe. Die Metrik ist seit Jahrzehnten verfügbar. Es heißt "Warte auf CPU".


FWIW, ich habe gerade die Perfmon-Leistungsindikatoren eines Windows 2008r2-Servers durchsucht, der unter Hyper-V läuft, und keine ähnliche Zeit für den Diebstahl gesehen (oder überhaupt eine Virtualisierung).


1
2018-05-24 12:49



Danke für die Überprüfung - anscheinend Virtualisierungszähler für Hyper-V sollte eigentlich verfügbar sein, vielleicht müssen sie zuerst irgendwie installiert / aktiviert werden? Ich bin jedoch immer noch nicht in der Lage, eine ähnliche / verwandte Metrik unter diesen zu identifizieren / abzuleiten. - Steffen Opel