Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gastsoftware interagiert mit dem Hypervisor über eine Vielzahl von Mechanismen. Viele davon spiegeln die herkömmlichen Mechanismen wieder, die von Software für die Interaktion mit dem zugrunde liegenden Prozessor verwendet werden. Daher sind diese Mechanismen architekturspezifisch. In der x64-Architektur werden die folgenden Mechanismen verwendet:
- CPUID-Anweisung: Wird für statische Feature- und Versionsinformationen verwendet.
- MSRs (modellspezifische Register): Wird für Status- und Steuerungswerte verwendet.
- Speicherzuordnungsregister: Wird für Status- und Steuerungswerte verwendet.
- Prozessorunterbrechungen: Wird für asynchrone Ereignisse, Benachrichtigungen und Nachrichten verwendet.
Zusätzlich zu diesen architekturspezifischen Schnittstellen bietet der Hypervisor eine einfache prozedurale Schnittstelle, die mit Hypercalls implementiert wird.
Hypervisorermittlung
Vor der Verwendung von Hypervisorschnittstellen sollte die Software zunächst bestimmen, ob sie in einer virtualisierten Umgebung ausgeführt wird. Auf x64-Plattformen, die dieser Spezifikation entsprechen, erfolgt dies durch Ausführen der CPUID-Anweisung mit einem Eingabewert (EAX) von 1. Bei der Ausführung sollte der Code bit 31 von register ECX (das "hypervisor present bit") überprüfen. Wenn dieses Bit festgelegt ist, ist ein Hypervisor vorhanden. In einer nicht virtualisierten Umgebung ist das Bit klar.
CPUID.01h.ECX:31 // if set, virtualization present
Wenn der "hypervisor present bit" festgelegt ist, können zusätzliche CPUID-Blattdaten abgefragt werden, um weitere Informationen über den konformen Hypervisor und seine Funktionen zu erhalten. Zwei solche Blätter sind garantiert verfügbar: 0x40000000
und 0x40000001
. Anschließend sind möglicherweise auch nummerierte Blätter verfügbar.
CPUID-Blätter im Standard-Hypervisor
Wenn das Blatt bei 0x40000000
abgefragt wird, gibt der Hypervisor Informationen zurück, die die maximale CPUID-Blattnummer des Hypervisors und eine Signatur der Anbieter-ID enthalten.
Register | Informationen bereitgestellt |
---|---|
EAX | Der maximale Eingabewert für CPUID-Informationen des Hypervisors |
EBX | Signatur der Hypervisor-Anbieter-ID |
ECX | Signatur der Hypervisor-Anbieter-ID |
EDX | Signatur der Hypervisor-Anbieter-ID |
Wenn das Blatt bei 0x40000001
abgefragt wird, gibt es einen Wert zurück, der eine anbieterneutrale Hypervisorschnittstellenidentifikation darstellt. Dadurch wird die Semantik der Blätter von bis 0x4000002
bestimmt 0x400000FF
.
Register | Informationen bereitgestellt |
---|---|
EAX | Hypervisor-Schnittstellensignatur. |
EBX | Reserviert |
ECX | Reserviert |
EDX | Reserviert |
Diese beiden Blätter ermöglichen es dem Gast, die Anbieter-ID des Hypervisors und die Schnittstelle unabhängig voneinander abfragt. Die Anbieter-ID wird nur zu Informations- und Diagnosezwecken bereitgestellt. Es wird empfohlen, dass Software nur Kompatibilitätsentscheidungen auf der Schnittstellensignatur abstützt, die über das Blatt gemeldet wird 0x40000001
.
Microsoft Hypervisor CPUID Leaves
Bei Hypervisoren, die der CPUID-Schnittstelle des Microsoft-Hypervisors entsprechen, 0x40000000
0x40000001
verfügen die Blattregister und über die folgenden Werte.
Hypervisor CPUID Leaf Range – 0x40000000
EAX bestimmt das maximale Blatt CPUID des Hypervisors. EBX-EDX enthält die Signatur der Hypervisoranbieter-ID. Die Signatur der Anbieter-ID sollte nur zu Berichts- und Diagnosezwecken verwendet werden.
Register | Informationen bereitgestellt |
---|---|
EAX | Der maximale Eingabewert für Hypervisor-CPUID-Informationen. Auf Microsoft-Hypervisoren ist dies mindestens 0x40000005 . |
EBX | 0x7263694D– "Micr" |
ECX | 0x666F736F – "osof" |
EDX | 0x76482074 – "t Hv" |
Anbieterneutrale Hypervisorschnittstellenidentifikation – 0x40000001
EAX enthält die Identifikationssignatur der Hypervisorschnittstelle. Dadurch wird die Semantik der Blätter von bis 0x40000002
bestimmt 0x400000FF
.
Register | Informationen bereitgestellt |
---|---|
EAX | 0x31237648– "Hv#1" |
EBX | Reserviert |
ECX | Reserviert |
EDX | Reserviert |
Hypervisoren, die der "Hv#1"-Schnittstelle entsprechen, stellen auch mindestens die folgenden Blätter bereit.
Hypervisor-Systemidentität – 0x40000002
Register | Bits | Informationen bereitgestellt |
---|---|---|
EAX | Buildnummer | |
EBX | 31-16 | Hauptversion |
15-0 | Nebenversion |
Hypervisor-Featureidentifikation – 0x40000003
EAX und EBX geben basierend auf den aktuellen Partitionsberechtigungen an, welche Features für die Partition verfügbar sind.
Register | Bits | Informationen bereitgestellt |
---|---|---|
EAX | Entspricht den Bits 31-0 HV_PARTITION_PRIVILEGE_MASK | |
EBX | Entspricht den Bits 63-32 HV_PARTITION_PRIVILEGE_MASK | |
ECX | Reserviert | |
EDX | 0 | Veraltet (zuvor angegebene Verfügbarkeit der MWAIT-Anweisung) |
1 | Unterstützung für das Gastdebuggen ist verfügbar | |
2 | Leistungsmonitor-Unterstützung verfügbar | |
3 | Unterstützung für dynamische Partitionierungsereignisse der physischen CPU ist verfügbar | |
4 | Unterstützung für die Übergabe des Hypercall-Eingabeparameterblocks über XMM-Register ist verfügbar. | |
5 | Unterstützung für den Leerlaufstatus eines virtuellen Gasts ist verfügbar. | |
6 | Unterstützung für den Hypervisor-Standbyzustand ist verfügbar | |
7 | Unterstützung für das Abfragen von NUMA-Entfernungen ist verfügbar. | |
8 | Unterstützung für die Bestimmung von Timerhäufigkeiten ist verfügbar. | |
9 | Unterstützung für das Einfügen synthetischer Computerüberprüfungen ist verfügbar. | |
10 | Unterstützung für Gastabsturz-MSRs verfügbar | |
11 | Unterstützung für Debug-MSRs verfügbar | |
12 | Unterstützung für NPIEP verfügbar | |
13 | DisableHypervisorAvailable | |
14 | ExtendedGvaRangesForFlushVirtualAddressListAvailable | |
15 | Unterstützung für die Rückgabe der Hypercallausgabe über XMM-Register ist verfügbar. | |
16 | Reserviert | |
17 | SintPollingModeAvailable | |
18 | HypercallMsrLockAvailable | |
19 | Verwenden von direkten synthetischen Timern | |
20 | Unterstützung für PAT-Registrierung für VSM verfügbar | |
21 | Unterstützung für bndcfgs-Register für VSM verfügbar | |
22 | Reserviert | |
23 | Unterstützung für nicht überwachten synthetischen Timer verfügbar | |
25-24 | Reserviert | |
26 | Das Feature Last Branch Record (LBR) von Intel wird unterstützt. | |
31-27 | Reserviert |
Implementierungs-Empfehlungen – 0x40000004
Gibt an, welches Verhalten der Hypervisor der Betriebssystem-Implementierung empfiehlt, um eine optimale Leistung zu erzielen.
Register | Bits | Informationen bereitgestellt |
---|---|---|
EAX | 0 | Empfehlen Sie die Verwendung von Hypercall für Adressraumswitches anstelle der MOV-zu-CR3-Anweisung. |
1 | Empfiehlt die Verwendung von Hypercall für lokale TLB-Leerungen anstelle von INVLPG- oder MOV-Anweisungen in CR3. | |
2 | Empfiehlt die Verwendung von Hypercall für Remote-TLB-Leerungen anstelle von Prozessorunterbrechungen. | |
3 | Empfiehlt die Verwendung von MSRs für den Zugriff auf APIC-Register EOI, ICR und TPR anstelle ihrer speicherabbildeten Entsprechungen. | |
4 | Es wird empfohlen, die vom Hypervisor bereitgestellte MSR zu verwenden, um eine Systemzurücksetzung zu initiieren. | |
5 | Empfehlen Sie die Verwendung von gelockerten Zeitsteuerungen für diese Partition. Bei Verwendung sollte der virtuelle Computer alle Watchdogtimeouts deaktivieren, die auf der rechtzeitigen Übermittlung externer Interrupts basieren. | |
6 | Empfehlen Sie die Verwendung der DMA-Neuzuordnung. | |
7 | Empfehlen Sie die Verwendung der Neuzuordnung von Interrupts. | |
8 | Reserviert. | |
9 | Es wird empfohlen, AutoEOI als veraltet zu deaktivieren. | |
10 | Empfehlen Sie die Verwendung des Hypercalls SyntheticClusterIpi. | |
11 | Empfehlen Sie die Verwendung der neueren ExProcessorMasks-Schnittstelle. | |
12 | Gibt an, dass der Hypervisor innerhalb einer Hyper-V-Partition geschachtelt ist. | |
13 | Empfehlen Sie die Verwendung von INT für MBEC-Systemaufrufe. | |
14 | Empfehlen Sie einen geschachtelten Hypervisor mithilfe der aktiven VMCS-Schnittstelle. Gibt auch an, dass möglicherweise zusätzliche geschachtelte Verschachtelungen verfügbar sind (siehe Blatt 0x4000000A). | |
15 | UseSyncedTimeline: Gibt an, dass die Partition die von der Stammpartition bereitgestellte QueryPerformanceCounter-Voreingenommenheit nutzen soll. | |
16 | Reserviert | |
17 | UseDirectLocalFlushEntire: Gibt an, dass der Gast CR4 umschalten soll. PGE, um den gesamten TLB zu leeren, da dies leistungsfähiger als ein Hypercall ist. | |
18 | NoNonArchitecturalCoreSharing: Gibt an, dass die Gemeinsame Nutzung von Kernen nicht möglich ist. Dies kann als Optimierung verwendet werden, um den Leistungsaufwand von STIBP zu vermeiden. | |
31-19 | Reserviert | |
EBX | Empfohlene Anzahl von Versuchen, einen Spinlockfehler zu wiederholen, bevor der Hypervisor über die Fehler benachrichtigt wird. 0xFFFFFFFF gibt an, dass nie benachrichtigt wird. | |
ECX | 6-0 | ImplementedPhysicalAddressBits: Gibt die physische Adressbreite (MAXPHYADDR) an, die von den physischen Prozessoren des Systems gemeldet wird. Wenn alle Bits 0 enthalten, wird das Feature nicht unterstützt. Beachten Sie, dass der gemeldete Wert die tatsächliche Anzahl physischer Adressbits und nicht die Bitposition ist, die zur Darstellung dieser Zahl verwendet wird. |
31-7 | Reserviert | |
EDX | Reserviert |
Hypervisor-Implementierungsgrenzwerte – 0x40000005
Beschreibt die Skalierungsgrenzwerte, die in der aktuellen Hypervisorimplementierungen unterstützt werden. Wenn ein Wert 0 (null) ist, macht der Hypervisor die entsprechenden Informationen nicht verfügbar. andernfalls haben sie diese Bedeutungen.
Register | Informationen bereitgestellt |
---|---|
EAX | Die maximale Anzahl unterstützter virtueller Prozessoren |
EBX | Die maximale Anzahl von unterstützten logischen Prozessoren |
ECX | Die maximale Anzahl von physischen Interruptvektoren, die für die Neuzuordnung von Interrupts verfügbar sind. |
EDX | Reserviert |
Implementierungshardwarefeatures – 0x40000006
Gibt an, welche hardwarespezifischen Features erkannt wurden und derzeit vom Hypervisor verwendet werden.
Register | Bits | Informationen bereitgestellt |
---|---|---|
EAX | 0 | Unterstützung für die APIC-Überlagerungsunterstützung wird erkannt und verwendet. |
1 | Unterstützung für MSR-Bitmaps wird erkannt und verwendet. | |
2 | Unterstützung für Architekturleistungsindikatoren wird erkannt und verwendet. | |
3 | Unterstützung für die Adressübersetzung der zweiten Ebene wird erkannt und verwendet. | |
4 | Unterstützung für die DMA-Neuzuordnung wurde erkannt und wird verwendet. | |
5 | Unterstützung für die Neuzuordnung von Interrupts wird erkannt und verwendet. | |
6 | Gibt an, dass ein Speicherbereinigungs-Bereinigungsmodul in der Hardware vorhanden ist. | |
7 | DMA-Schutz wird verwendet. | |
8 | HPET wird angefordert. | |
9 | Synthetische Timer sind flüchtig. | |
13-10 | Die Hypervisorebene des aktuellen Gasts – "0", wenn er nicht geschachtelt ist. | |
14 | Physischer Zielmodus erforderlich. | |
15 | Reserviert | |
16 | Unterstützung für das Nullen des Hardwarearbeitsspeichers ist vorhanden. | |
17 | Unterstützung für uneingeschränkten Gast ist vorhanden. | |
18 | Unterstützung für die Ressourcenzuordnung (RDT-A, PQOS-A) ist vorhanden. | |
19 | Unterstützung für die Ressourcenüberwachung (RDT-M, PQOS-M) ist vorhanden. | |
20 | Unterstützung für virtuelle Gast-PMU ist vorhanden. | |
21 | Unterstützung für virtuellen Lbr-Gastcomputer ist vorhanden. | |
22 | Unterstützung für virtuelle IPT-Gastbenutzer ist vorhanden. | |
23 | Unterstützung für die APIC-Emulation ist vorhanden. | |
24 | Die ACPI-WDAT-Tabelle wird vom Hypervisor erkannt und verwendet. | |
31-25 | Reserviert | |
EBX | Reserviert | |
ECX | Reserviert | |
EDX | Reserviert |
Identifizierung geschachtelter Hypervisorfeatures – 0x40000009
Beschreibt die Funktionen, die vom Hypervisor für die Partition verfügbar gemacht werden, wenn geschachtelt ausgeführt wird. EAX beschreibt den Zugriff auf virtuelle MSRs. EDX beschreibt den Zugriff auf Hypercalls.
Register | Bits | Informationen bereitgestellt |
---|---|---|
EAX | 1-0 | Reserviert |
2 | AccessSynicRegs | |
3 | Reserviert | |
4 | AccessIntrCtrlRegs | |
5 | AccessHypercallMsrs | |
6 | AccessVpIndex | |
11-7 | Reserviert | |
12 | AccessReenlightenmentControls | |
31-13 | Reserviert | |
EBX | Reserviert | |
ECX | Reserviert | |
EDX | 3-0 | Reserviert |
4 | XmmRegistersForFastHypercallAvailable | |
14-5 | Reserviert | |
15 | FastHypercallOutputAvailable | |
16 | Reserviert | |
17 | SintPollingModeAvailable | |
31-18 | Reserviert |
Geschachtelte Hypervisorvirtualisierungsfeatures – 0x4000000A
Gibt an, welche geschachtelten Virtualisierungsoptimierungen für einen geschachtelten Hypervisor verfügbar sind.
Register | Bits | Informationen bereitgestellt |
---|---|---|
EAX | 7-0 | Enerklärte VMCS-Version (niedrig) |
15-8 | Enerklärte VMCS-Version (hoch) | |
16 | Reserviert | |
17 | Gibt die Unterstützung für direkte virtuelle Flush-Hypercalls an. | |
18 | Gibt die Unterstützung für die Hypercalls HvFlushGuestPhysicalAddressSpace und HvFlushGuestPhysicalAddressList (auf Intel-Plattformen) an. | |
19 | Gibt die Unterstützung für die Verwendung einer geeigneten MSR-Bitmap an. | |
20 | Gibt die Unterstützung für die Kombination von Virtualisierungsausnahmen in der Seitenfehlerausnahmeklasse an. | |
21 | Reserviert | |
22 | Gibt die Unterstützung für den geschalteten TLB auf AMD-Plattformen an. ASID-Leerungen wirken sich nicht auf TLB-Einträge aus, die vom NPT abgeleitet wurden. Hypercalls müssen verwendet werden, um NPT-TLB-Einträge ungültig zu machen. Gibt außerdem die Unterstützung für die Hypercalls HvFlushGuestPhysicalAddressSpace und HvFlushGuestPhysicalAddressList an. | |
31-21 | Reserviert | |
EBX | Reserviert | |
ECX | Reserviert | |
EDX | Reserviert |
Versionsverwaltung
Die Informationen zur Hypervisorversion werden im Blatt 0x40000002
codiert. Es werden zwei Versionsnummern bereitgestellt: die Hauptversion und die Dienstversion.
Die Hauptversion enthält eine Haupt- und Nebenversionsnummer sowie eine Buildnummer. Diese entsprechen microsoft Windows Releasenummern. Die Dienstversion beschreibt Änderungen, die an der Hauptversion vorgenommen wurden.
Clients wird dringend empfohlen, nach Hypervisorfeatures zu suchen, indem sie CPUID-Blätter 0x40000003
verwenden 0x40000005
, anstatt sie mit Versionbereichen zu vergleichen.