Freigeben über


Feature- und Schnittstellenermittlung

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, 0x400000000x40000001 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 0x40000002codiert. 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.