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 top
Befehls 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 Time
und % 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.)