Functie- en interfacedetectie

In deze sectie wordt beschreven hoe gastsoftware de aanwezigheid van een hypervisor detecteert en query's uitvoert op de mogelijkheden, functies en versie-informatie met behulp van architectuurspecifieke detectiemechanismen.

Functie- en interfacedetectie (x64)

Gastsoftware communiceert met de hypervisor via verschillende mechanismen. Veel van deze spiegelen de traditionele mechanismen die door software worden gebruikt om te communiceren met de onderliggende processor. Daarom zijn deze mechanismen architectuurspecifiek. In de x64-architectuur worden de volgende mechanismen gebruikt:

  • CPUID-instructie: wordt gebruikt voor statische functie- en versiegegevens.
  • MSR's (modelspecifieke registers): wordt gebruikt voor status- en controlewaarden.
  • Geheugen-toegewezen registers: wordt gebruikt voor status- en controlewaarden.
  • Processoronderbreken: wordt gebruikt voor asynchrone gebeurtenissen, meldingen en berichten.

Naast deze architectuurspecifieke interfaces biedt de hypervisor een eenvoudige procedurele interface die is geïmplementeerd met hypercalls.

Detectie van hypervisor

Voordat u hypervisorinterfaces gebruikt, moet de software eerst bepalen of deze wordt uitgevoerd in een gevirtualiseerde omgeving. Op x64-platforms die aan deze specificatie voldoen, wordt dit gedaan door de CPUID-instructie uit te voeren met een invoerwaarde (EAX) van 1. Bij de uitvoering moet code bit 31 van het register ECX controleren (de 'hypervisor present bit'). Als deze bit is ingesteld, is er een hypervisor aanwezig. In een niet-gevirtualiseerde omgeving is de bit duidelijk.

CPUID.01h.ECX:31 // if set, virtualization present

Als de 'hypervisor present bit' is ingesteld, kunnen extra CPUID-bladbladen worden opgevraagd voor meer informatie over de conforme hypervisor en de bijbehorende mogelijkheden. Twee dergelijke bladeren zijn gegarandeerd beschikbaar: 0x40000000 en 0x40000001. Vervolgens kunnen genummerde bladeren ook beschikbaar zijn.

Standaard bladeren hypervisor CPUID

Wanneer het blad op 0x40000000 een query wordt uitgevoerd, retourneert de hypervisor informatie die het maximale CPUID-bladnummer van de hypervisor en een leverancier-id-handtekening levert.

Register Verstrekte informatie
EAX De maximale invoerwaarde voor informatie over de CPUID van de hypervisor
EBX Handtekening voor leverancier-id van hypervisor
ECX Handtekening voor leverancier-id van hypervisor
EDX Handtekening voor leverancier-id van hypervisor

Als er query's worden uitgevoerd op 0x40000001 het blad, retourneert deze een waarde die een leverancierneutrale hypervisor-interfaceidentificatie vertegenwoordigt. Dit bepaalt de semantiek van de bladeren van 0x4000002 door 0x400000FF.

Register Verstrekte informatie
EAX Handtekening van hypervisorinterface.
EBX Gereserveerd
ECX Gereserveerd
EDX Gereserveerd

Met deze twee bladeren kan de gast de leverancier-id en interface van de hypervisor onafhankelijk opvragen. De leverancier-id wordt alleen verstrekt voor informatieve en diagnostische doeleinden. Het wordt aanbevolen dat software alleen basiscompatibiliteitsbeslissingen op de interfacehandtekening gerapporteerd via leaf 0x40000001.

Microsoft Hypervisor CPUID bladeren

Bij hypervisors die voldoen aan de CPUID-interface van microsoft hypervisor, hebben de 0x40000000 en 0x40000001 leaf-registers de volgende waarden.

Hypervisor CPUID Leaf Range - 0x40000000

EAX bepaalt het maximale CPUID-blad van de hypervisor. EBX-EDX de handtekening van de leverancier-id van de hypervisor bevatten. De handtekening van de leverancier-id mag alleen worden gebruikt voor rapportage- en diagnostische doeleinden.

Register Verstrekte informatie
EAX De maximale invoerwaarde voor informatie over de CPUID van de hypervisor. Op Microsoft-hypervisors is dit ten minste 0x40000005.
EBX 0x7263694D— "Micr"
ECX 0x666F736F— "osof"
EDX 0x76482074— "t Hv"

Identificatie van hypervisor vendor-neutral interface - 0x40000001

EAX bevat de handtekening voor identificatie van de hypervisorinterface. Dit bepaalt de semantiek van de bladeren van 0x40000002 door 0x400000FF.

Register Verstrekte informatie
EAX 0x31237648— "Hv#1"
EBX Gereserveerd
ECX Gereserveerd
EDX Gereserveerd

Hypervisors die voldoen aan de interface 'Hv#1', bieden ten minste de volgende bladeren.

Hypervisor-systeemidentiteit - 0x40000002

Register Bits Verstrekte informatie
EAX Buildnummer
EBX 31-16 Hoofdversie
15-0 Kleine versie

Identificatie van hypervisorfuncties - 0x40000003

EAX en EBX geven aan welke functies beschikbaar zijn voor de partitie op basis van de huidige partitiebevoegdheden.

Register Bits Verstrekte informatie
EAX Komt overeen met bits 31-0 van HV_PARTITION_PRIVILEGE_MASK
EBX Komt overeen met bits 63-32 van HV_PARTITION_PRIVILEGE_MASK
ECX 4-0 Gereserveerd
5 Invariant Mperf is beschikbaar
6 Supervisor-schaduwstack is beschikbaar
7 Architectural PMU is beschikbaar
8 Het onderscheppen van uitzonderingen is beschikbaar
31-9 Gereserveerd
EDX 0 Afgeschaft (eerder aangegeven beschikbaarheid van de MWAIT-instructie)
1 Ondersteuning voor gastopsporing is beschikbaar
2 Ondersteuning voor prestatiemeter is beschikbaar
3 Ondersteuning voor dynamische partitioneringsevenementen van fysieke CPU is beschikbaar
4 Ondersteuning voor het doorgeven van hypercall-invoerparameterblok via XMM-registers is beschikbaar
5 Er is ondersteuning beschikbaar voor een status van een virtuele gast die niet actief is
6 Ondersteuning voor de slaapstand van de hypervisor is beschikbaar
7 Ondersteuning voor het uitvoeren van query's op NUMA-afstanden is beschikbaar
8 Ondersteuning voor het bepalen van timerfrequenties is beschikbaar
9 Ondersteuning voor het injecteren van synthetische machinecontroles is beschikbaar
10 Ondersteuning voor gastcrash-MSR's is beschikbaar
11 Ondersteuning voor foutopsporings-MSR's is beschikbaar
12 Ondersteuning voor NPIEP is beschikbaar
13 DisableHypervisorAvailable
14 ExtendedGvaRangesForFlushVirtualAddressListAvailable
15 Ondersteuning voor het retourneren van hypercall-uitvoer via XMM-registers is beschikbaar
16 Gereserveerd
17 SintPollingModeAvailable
18 HypercallMsrLockAvailable
19 Directe synthetische timers gebruiken
20 Ondersteuning voor PAT-register beschikbaar voor VSM
21 Ondersteuning voor bndcfgs-register beschikbaar voor VSM
22 Gereserveerd
23 Ondersteuning voor synthetische tijdonthalingstimer beschikbaar
25-24 Gereserveerd
26 De LBR-functie (Last Branch Record) van Intel wordt ondersteund
31-27 Gereserveerd

Implementatieaanbeveling - 0x40000004

Geeft aan welk gedrag de hypervisor het besturingssysteem aanbeveelt voor optimale prestaties.

Register Bits Verstrekte informatie
EAX 0 Het is raadzaam hypercall te gebruiken voor adresruimteswitches in plaats van MOV naar CR3-instructie.
1 U kunt het beste hypercall gebruiken voor lokale TLB-flushes in plaats van INVLPG of MOV naar CR3-instructies.
2 U kunt het beste hypercall gebruiken voor externe TLB-flushes in plaats van interprocessoronderbreken.
3 U wordt aangeraden MSR's te gebruiken voor toegang tot APIC-registers EOI, ICR en TPR in plaats van hun geheugen-toegewezen tegenhangers.
4 U kunt het beste de door de hypervisor geleverde MSR gebruiken om een systeemRESET te starten.
5 U kunt het beste ontspannen timing gebruiken voor deze partitie. Als deze wordt gebruikt, moet de VM time-outs voor watchdogs uitschakelen die afhankelijk zijn van de tijdige levering van externe interrupts.
6 U kunt het beste opnieuw toewijzen met DMA.
7 U kunt het beste onderbreken opnieuw toewijzen.
8 Gereserveerd.
9 U wordt aangeraden AutoEOI af te schalen.
10 Het gebruik van SyntheticClusterIpi hypercall aanbevelen.
11 U kunt het beste de nieuwere ExProcessorMasks-interface gebruiken.
12 Geeft aan dat de hypervisor is genest binnen een Hyper-V partitie.
13 U kunt het beste INT gebruiken voor MBEC-systeemoproepen.
14 Raad een geneste hypervisor aan met behulp van de verlichte VMCS-interface. Geeft ook aan dat er mogelijk extra geneste verlichting beschikbaar is (zie leaf 0x4000000A).
15 UseSyncedTimeline: geeft aan dat de partitie de bias QueryPerformanceCounter moet gebruiken die wordt geleverd door de hoofdpartitie.
16 Gereserveerd
17 UseDirectLocalFlushEntire : geeft aan dat de gast CR4 moet in-/uitschakelen. PGE om de hele TLB leeg te maken, omdat dit beter presteert dan het maken van een hypercall.
18 NoNonArchitecturalCoreSharing - geeft aan dat kerndeling niet mogelijk is. Dit kan worden gebruikt als optimalisatie om de prestatieoverhead van STIBP te voorkomen.
31-19 Gereserveerd
EBX Aanbevolen aantal pogingen om een spinlockfout opnieuw uit te voeren voordat de hypervisor op de hoogte wordt gebracht van de fouten. 0xFFFFFFFF geeft aan dat ze nooit op de hoogte zijn.
ECX 6-0 ImplementedPhysicalAddressBits : rapporteert de fysieke adresbreedte (MAXPHYADDR) die door de fysieke processors van het systeem is gerapporteerd. Als alle bits 0 bevatten, wordt de functie niet ondersteund. Houd er rekening mee dat de gerapporteerde waarde het werkelijke aantal fysieke adres-bits is en niet de bitpositie die wordt gebruikt om dat getal weer te geven.
31-7 Gereserveerd
EDX Gereserveerd

Implementatielimieten voor hypervisor - 0x40000005

Beschrijft de schaallimieten die worden ondersteund in de huidige hypervisor-implementatie. Als een waarde nul is, geeft de hypervisor de bijbehorende informatie niet weer; anders hebben ze deze betekenissen.

Register Verstrekte informatie
EAX Het maximum aantal ondersteunde virtuele processors
EBX Het maximum aantal ondersteunde logische processors
ECX Het maximum aantal fysieke interruptvectoren dat beschikbaar is voor het opnieuw toewijzen van interrupts.
EDX Gereserveerd

Hardwarefuncties voor implementatie - 0x40000006

Geeft aan welke hardwarespecifieke functies zijn gedetecteerd en momenteel worden gebruikt door de hypervisor.

Register Bits Verstrekte informatie
EAX 0 Ondersteuning voor APIC-overlayhulp wordt gedetecteerd en in gebruik.
1 Ondersteuning voor MSR-bitmaps wordt gedetecteerd en in gebruik.
2 Ondersteuning voor prestatiemeteritems voor architectuur wordt gedetecteerd en in gebruik.
3 Ondersteuning voor adresomzetting op het tweede niveau wordt gedetecteerd en in gebruik.
4 Ondersteuning voor opnieuw toewijzen van DMA's wordt gedetecteerd en in gebruik.
5 Ondersteuning voor het opnieuw toewijzen van interrupts wordt gedetecteerd en in gebruik.
6 Geeft aan dat er een geheugenpatrouillescrubber aanwezig is in de hardware.
7 DMA-beveiliging wordt gebruikt.
8 HPET wordt aangevraagd.
9 Synthetische timers zijn vluchtig.
13-10 Het hypervisorniveau van de huidige gast - '0' als deze niet is genest.
14 Fysieke doelmodus vereist.
15 GEBRUIK VMFUNC voor aliastoewijzingsswitch.
16 Ondersteuning voor hardwaregeheugennulering is aanwezig.
17 Ondersteuning voor Onbeperkte gast is aanwezig.
18 Ondersteuning voor resourcetoewijzing (RDT-A, PQOS-A) is aanwezig.
19 Ondersteuning voor resourcebewaking (RDT-M, PQOS-M) is aanwezig.
20 Ondersteuning voor gast virtuele PMU is aanwezig.
21 Ondersteuning voor virtuele gast-LBR is aanwezig.
22 Ondersteuning voor virtuele IPT van gasten is aanwezig.
23 Ondersteuning voor APIC-emulatie is aanwezig.
24 De ACPI WDAT-tabel wordt gedetecteerd en wordt gebruikt door de hypervisor.
31-25 Gereserveerd
EBX Gereserveerd
ECX Gereserveerd
EDX Gereserveerd

Identificatie van geneste hypervisorfuncties - 0x40000009

Beschrijft de functies die beschikbaar zijn voor de partitie door de hypervisor bij het uitvoeren van geneste items. EAX beschrijft de toegang tot virtuele MSR's. EDX beschrijft de toegang tot hypercalls.

Register Bits Verstrekte informatie
EAX 1-0 Gereserveerd
2 AccessSynicRegs
3 Gereserveerd
4 AccessIntrCtrlRegs
5 AccessHypercallMsrs
6 AccessVpIndex
11-7 Gereserveerd
12 AccessReenlightenmentControls
31-13 Gereserveerd
EBX Gereserveerd
ECX Gereserveerd
EDX 3-0 Gereserveerd
4 XmmRegistersForFastHypercallAvailable
14-5 Gereserveerd
15 FastHypercallOutputAvailable
16 Gereserveerd
17 SintPollingModeAvailable
31-18 Gereserveerd

Functies voor geneste virtualisatie van hypervisor - 0x4000000A

Geeft aan welke geneste virtualisatieoptimalisaties beschikbaar zijn voor een geneste hypervisor.

Register Bits Verstrekte informatie
EAX 7-0 Verlichte VMCS-versie (laag)
15-8 Verlichte VMCS-versie (hoog)
16 Gereserveerd
17 Geeft ondersteuning aan voor directe virtuele flush hypercalls.
18 Geeft ondersteuning aan voor de HvCallFlushGuestPhysicalAddressSpace en HvCallFlushGuestPhysicalAddressList hypercalls (op x64-platforms).
19 Geeft ondersteuning aan voor het gebruik van een verlichte MSR-bitmap.
20 Geeft ondersteuning aan voor het combineren van virtualisatie-uitzonderingen in de foutklasse van de pagina.
21 Geeft ondersteuning aan voor niet-nulwaarde van het veld 0x00002802 (GuestIa32DebugCtl) in de VMCS.
22 Geeft ondersteuning aan voor de verlichte TLB op AMD-platforms. ASID-flushes zijn niet van invloed op TLB-vermeldingen die zijn afgeleid van de NPT. Hypercalls moeten worden gebruikt om NPT TLB-vermeldingen ongeldig te maken. Geeft ook ondersteuning aan voor de HvCallFlushGuestPhysicalAddressSpace en HvCallFlushGuestPhysicalAddressList hypercalls.
31-21 Gereserveerd
EBX 0 Geeft ondersteuning aan voor de velden GuestPerfGlobalCtrl en HostPerfGlobalCtrl in de verlichte VMCS.
31-1 Gereserveerd
ECX Gereserveerd
EDX Gereserveerd

Versioning

De informatie over de hypervisorversie wordt gecodeerd in leaf 0x40000002. Er zijn twee versienummers opgegeven: de hoofdversie en de serviceversie.

De hoofdversie bevat een primaire en secundaire versienummer en een buildnummer. Deze komen overeen met de releasenummers van Microsoft Windows. De serviceversie beschrijft wijzigingen die zijn aangebracht in de hoofdversie.

Clients worden sterk aangeraden om te controleren op hypervisorfuncties door CPUID te 0x400000030x40000005 gebruiken in plaats van te vergelijken met versiebereiken.

Functie- en interfacedetectie (ARM64)

In de ARM64-architectuur worden de volgende mechanismen gebruikt voor functie- en interfacedetectie:

  • HvRegister-query's via HvCallGetVpRegisters – Wordt gebruikt voor statische functie- en versiegegevens.
  • Geheugen-toegewezen registers: wordt gebruikt voor status- en controlewaarden.

Naast deze architectuurspecifieke interfaces biedt de hypervisor een eenvoudige procedurele interface die is geïmplementeerd met hypercalls.

Detectie van hypervisor

Voordat u de meeste hypervisorinterfaces gebruikt, moet de software eerst bepalen of deze wordt uitgevoerd in een gevirtualiseerde omgeving.

In ARM64 kan gastsoftware de hypervisor detecteren met behulp van de standaardinterface van SMCCC (SMC Calling Convention). De detectie wordt uitgevoerd met behulp van de HVC- of SMC-instructie met de functie-id 0xC600FF0 in X0 (dit komt overeen met een 64-bits leverancierspecifieke hypervisoraanroep, VENDOR_HYP_FUNCTION_CODE_UID). De oproep volgt de SMCCC-conventies, waaronder een imm16 van 0. De Microsoft-hypervisor retourneert de volgende waarden die de GUID 4d32ba58-cd24-4764-8eef-6c7516597024vertegenwoordigen:

Register Waarde
X0 0x4d32ba58
X1 0xcd244764
X2 0x8eef6c75
X3 0x16597024

Zodra een hypervisor is gedetecteerd, kan gastsoftware query's uitvoeren op hypervisormogelijkheden via synthetische registers met behulp van de Hypercalls HvCallGetVpRegisters . Er kunnen verschillende sleutelregisters worden opgevraagd voordat het register van het gastbesturingssysteem is ingesteld, waardoor vroege detectie van hypervisorfuncties mogelijk is tijdens het opstarten.

Hypervisor-functieregisters

ARM64-platformen doorzoeken hypervisorgegevens via synthetische registers in plaats van CPUID-instructies. Deze registers bieden equivalente informatie aan hun x64 CPUID-tegenhangers en worden geopend via HvCallGetVpRegisters. Alle functieregisters retourneren 128-bits waarden.

Hypervisor System Identity - HvRegisterHypervisorVersion

Retourneert versiegegevens die zijn gecodeerd in een 128-bits waarde. De indeling is identiek aan x64 CPUID leaf 0x40000002, waarbij x64 registerwaarden zijn verpakt in het 128-bits resultaat (EAX in bits 31-0, EBX in bits 63-32, ECX in bits 95-64, EDX in bits 127-96).

Identificatie van hypervisorfuncties - HvRegisterPrivilegesAndFeaturesInfo

Gelijk aan x64 CPUID leaf 0x40000003. Geeft aan welke functies beschikbaar zijn voor de partitie op basis van de huidige partitiebevoegdheden. Retourneert een 128-bits waarde met deze velden:

Bits Verstrekte informatie
31-0 Komt overeen met bits 31-0 van HV_PARTITION_PRIVILEGE_MASK
63-32 Komt overeen met bits 63-32 van HV_PARTITION_PRIVILEGE_MASK
64 Ondersteuning voor gastopsporing is beschikbaar.
65 Ondersteuning voor Performance Monitor is beschikbaar.
66 Ondersteuning voor dynamische partitioneringsevenementen van fysieke CPU is beschikbaar.
67 Er is ondersteuning beschikbaar voor een niet-actieve status van een virtuele gast.
68 Ondersteuning voor de status van de hypervisor slaapstand is beschikbaar.
69 Ondersteuning voor het uitvoeren van query's op NUMA-afstanden is beschikbaar.
70 Ondersteuning voor het bepalen van timerfrequenties is beschikbaar.
71 Ondersteuning voor het injecteren van synthetische machinecontroles is beschikbaar.
72 Ondersteuning voor gastcrashregisters is beschikbaar.
73 Gereserveerd.
74 DisableHypervisorAvailable.
75 Gereserveerd.
76 SintPollingModeAvailable.
77 Gebruik directe synthetische timers.
127-78 Gereserveerd.

Implementatieaanbevelingen - HvRegisterFeaturesInfo

Gelijk aan x64 CPUID leaf 0x40000004. Geeft aan welk gedrag de hypervisor het besturingssysteem aanbeveelt voor optimale prestaties. Retourneert een 128-bits waarde.

Bits Verstrekte informatie
0 UseHvRegisterForReset - In ARM64 is dit altijd onwaar (partities moeten in plaats daarvan PSCI-SYSTEM_RESET gebruiken).
1 U kunt het beste ontspannen timing gebruiken voor deze partitie. Als deze wordt gebruikt, moet de VM time-outs voor watchdogs uitschakelen die afhankelijk zijn van de tijdige levering van externe interrupts.
2 Het gebruik van SyntheticClusterIpi hypercall aanbevelen. In ARM64 is dit onwaar voor de hoofdpartitie (die rechtstreeks ICC_SGI1R_EL1 moet gebruiken) en waar voor gastpartities.
3 U kunt het beste de nieuwere ExProcessorMasks-interface gebruiken.
4 Geeft aan dat de hypervisor is genest binnen een Hyper-V partitie.
5 Hiermee wordt aangegeven dat de partitie de bias QueryPerformanceCounter moet gebruiken die is opgegeven door de hoofdpartitie.
20-6 Gereserveerd
21 UseHypercallForMmioAccess
22 UseGpaPinningHypercall
23 WakeVps
25-24 Gereserveerd
26 MapPartitionEventLogBuffer
31-27 Gereserveerd
63-32 Aanbevolen aantal pogingen om een spinlockfout opnieuw uit te voeren voordat de hypervisor op de hoogte wordt gebracht van de fouten. 0xFFFFFFFF geeft aan dat ze nooit op de hoogte zijn.
127-64 Gereserveerd

Implementatielimieten voor hypervisor - HvRegisterImplementationLimitsInfo

Beschrijft de schaallimieten die worden ondersteund in de huidige hypervisor-implementatie. Als een waarde nul is, geeft de hypervisor de bijbehorende informatie niet weer. Retourneert een 128-bits waarde met een indeling die identiek is aan x64 CPUID leaf 0x40000005, waarbij x64 registerwaarden zijn verpakt in het 128-bits resultaat (EAX in bits 31-0, EBX in bits 63-32, ECX in bits 95-64, EDX in bits 127-96).

Hardwarefuncties voor implementatie - HvRegisterHardwareFeaturesInfo

Gelijk aan x64 CPUID leaf 0x40000006. Geeft aan welke hardwarespecifieke functies zijn gedetecteerd en momenteel worden gebruikt door de hypervisor. Retourneert een 128-bits waarde.

Bits Verstrekte informatie
0 Ondersteuning voor prestatiemeteritems voor architectuur wordt gedetecteerd en in gebruik.
1 Ondersteuning voor adresomzetting op het tweede niveau wordt gedetecteerd en in gebruik.
2 Ondersteuning voor opnieuw toewijzen van DMA's wordt gedetecteerd en in gebruik.
3 Ondersteuning voor het opnieuw toewijzen van interrupts wordt gedetecteerd en in gebruik.
4 Geeft aan dat er een geheugenpatrouillescrubber aanwezig is in de hardware.
5 DMA-beveiliging wordt gebruikt.
6 Synthetische timers zijn vluchtig.
127-7 Gereserveerd

PmU-gebeurtenistypen (Core Performance Monitoring Unit)

Er is een basislijnset armarchitectuur core PMU-gebeurtenissen beschikbaar voor gastpartities op alle ARM64-platforms. Aanvullende Core PMU-gebeurtenissen zijn beschikbaar op Azure Cobalt 100 en Azure Cobalt 200. Gebeurtenisnummers en -namen volgen de PMU-gebeurtenisdefinities van de Arm-architectuur.

Gastsoftware kan het platform identificeren door het MIDR_EL1 register te lezen en de lage 32 bits te vergelijken voor exacte gelijkheid van de waarden in de volgende tabel, zonder de implementeerfunctie, variant, architectuur, onderdeel of revisievelden te maskeren. Dit is de aanbevolen heuristiek om te bepalen of de extra core PMU-gebeurtenistypen beschikbaar zijn voordat ze worden geopend.

Platform MIDR_EL1
Azure Kobalt 100 0x410FD490
Azure Kobalt 200 0x410FD841

In de volgende tabel geeft een vinkje (✓) aan dat het gebeurtenistype Core PMU wordt ondersteund voor gastpartities op het bijbehorende platform.

Gebeurtenisnummer Gebeurtenisnaam Alle ARM64-platformen Azure Kobalt 100 Azure Kobalt 200
0x0000 SW_INCR
0x0001 L1I_CACHE_REFILL
0x0002 L1I_TLB_REFILL
0x0003 L1D_CACHE_REFILL
0x0004 L1D_CACHE
0x0005 L1D_TLB_REFILL
0x0008 INST_RETIRED
0x0010 BR_MIS_PRED
0x0011 CPU_CYCLES
0x0012 BR_PRED
0x0013 MEM_ACCESS
0x0014 L1I_CACHE
0x0016 L2D_CACHE
0x0017 L2D_CACHE_REFILL
0x001A MEMORY_ERROR
0x001B INST_SPEC
0x001C TTBR_WRITE_RETIRED
0x0020 L2D_CACHE_ALLOCATE
0x0021 BR_RETIRED
0x0022 BR_MIS_PRED_RETIRED
0x0023 STALL_FRONTEND
0x0024 STALL_BACKEND
0x0025 L1D_TLB
0x0026 L1I_TLB
0x0029 L3D_CACHE_ALLOCATE
0x002D L2D_TLB_REFILL
0x002F L2D_TLB
0x0031 REMOTE_ACCESS
0x0034 DTLB_WALK
0x0035 ITLB_WALK
0x0036 LL_CACHE_RD
0x0037 LL_CACHE_MISS_RD
0x0039 L1D_CACHE_LMISS_RD
0x003A OP_RETIRED
0x003B OP_SPEC
0x003C STALL
0x003D STALL_SLOT_BACKEND
0x003E STALL_SLOT_FRONTEND
0x003F STALL_SLOT
0x0040 L1D_CACHE_RD
0x0041 L1D_CACHE_WR
0x0042 L1D_CACHE_REFILL_RD
0x0043 L1D_CACHE_REFILL_WR
0x0044 L1D_CACHE_REFILL_INNER
0x0045 L1D_CACHE_REFILL_OUTER
0x0046 L1D_CACHE_WB_VICTIM
0x004C L1D_TLB_REFILL_RD
0x004D L1D_TLB_REFILL_WR
0x004E L1D_TLB_RD
0x004F L1D_TLB_WR
0x0050 L2D_CACHE_RD
0x0051 L2D_CACHE_WR
0x0052 L2D_CACHE_REFILL_RD
0x0053 L2D_CACHE_REFILL_WR
0x0056 L2D_CACHE_WB_VICTIM
0x005C L2D_TLB_REFILL_RD
0x005D L2D_TLB_REFILL_WR
0x005E L2D_TLB_RD
0x005F L2D_TLB_WR
0x0066 MEM_ACCESS_RD
0x0067 MEM_ACCESS_WR
0x0068 UNALIGNED_LD_SPEC
0x0069 UNALIGNED_ST_SPEC
0x0070 LD_SPEC
0x0071 ST_SPEC
0x0073 DP_SPEC
0x0074 ASE_SPEC
0x0075 VFP_SPEC
0x0077 CRYPTO_SPEC
0x0078 BR_IMMED_SPEC
0x007A BR_INDIRECT_SPEC
0x01B8 L2D_CACHE_L1HWPRF
0x01B9 L2D_CACHE_REFILL_L1HWPRF
0x4004 CNT_CYCLES
0x4005 STALL_BACKEND_MEM
0x4006 L1I_CACHE_LMISS
0x4009 L2D_CACHE_LMISS_RD
0x4020 LDST_ALIGN_LAT
0x4021 LD_ALIGN_LAT
0x4022 ST_ALIGN_LAT
0x4024 MEM_ACCESS_CHECKED
0x4025 MEM_ACCESS_CHECKED_RD
0x4026 MEM_ACCESS_CHECKED_WR
0x8006 SVE_INST_SPEC

Versioning

De informatie over de hypervisorversie wordt gecodeerd in HvRegisterHypervisorVersion. De notatie komt overeen met het x64-equivalent.