Delen via


Virtuele interruptcontroller

De hypervisor virtualiseert de levering aan virtuele processors.

virtuele interruptcontrollers Architecture-Specific

Op x64 Platforms

Op x64-platforms wordt interruptvirtualisatie uitgevoerd door gebruik te maken van een synthetische interruptcontroller (SynIC), een uitbreiding van een gevirtualiseerde lokale APIC; Dat wil gezegd: elke virtuele processor heeft een lokaal APIC-exemplaar met de SynIC-extensies. Deze extensies bieden een eenvoudig communicatiemechanisme tussen partities dat wordt beschreven in het hoofdstukInter-Partition Communicatie .

Op ARM64-platforms

Op ARM64-platforms maakt de hypervisor een virtuele ARM Generic Interrupt Controller (GIC) beschikbaar die voldoet aan de ARM GIC-architectuurspecificatie. Gastpartities moeten verwijzen naar de ARM GIC-architectuurspecificatie voor meer informatie over de virtuele GIC-interface, registers en interruptafhandelingsmechanismen.

Categorieën onderbreken

Interrupts die aan een partitie worden geleverd, vallen in twee categorieën: extern en intern. Externe interrupts zijn afkomstig van andere partities of apparaten en interne interrupts zijn afkomstig uit de partitie zelf.

Externe interrupts worden gegenereerd in de volgende situaties:

  • Een fysiek hardwareapparaat genereert een hardware-interrupt.
  • Een bovenliggende partitie bevestigt een virtuele interrupt (meestal tijdens het emuleren van een hardwareapparaat).
  • De hypervisor levert een bericht (bijvoorbeeld door een snijpunt) aan een partitie.
  • Een andere partitie plaatst een bericht.
  • Een andere partitie geeft een gebeurtenis aan.

Interne interrupts worden gegenereerd in de volgende situaties:

  • Een virtuele processor heeft toegang tot het APIC-interruptopdrachtregister (ICR).
  • Een synthetische timer verloopt.

Lokaal APIC (alleen x64)

Op x64-platforms is de SynIC een superset van een lokale APIC. De interface voor deze APIC wordt gegeven door een set 32-bits geheugen toegewezen registers. Deze lokale APIC (inclusief het gedrag van de geheugentoewijzingsregisters) is over het algemeen compatibel met de lokale APIC op P4/Xeon-systemen, zoals beschreven in de documentatie van Intel en AMD.

De lokale APIC-virtualisatie van de hypervisor kan op de volgende kleine manieren afwijken van de fysieke APIC-bewerking:

  • Op fysieke systemen kan de IA32_APIC_BASE MSR voor elke processor in het systeem verschillen. De hypervisor kan vereisen dat deze MSR dezelfde waarde bevat voor alle virtuele processors binnen een partitie. Als zodanig kan deze MSR worden behandeld als een partitiebrede waarde. Als een virtuele processor dit register wijzigt, kan de waarde effectief worden doorgegeven aan alle virtuele processors binnen de partitie.
  • De IA32_APIC_BASE MSR definieert een 'globale inschakelen'-bit voor het in- of uitschakelen van de APIC. De gevirtualiseerde APIC kan altijd worden ingeschakeld. Zo ja, dan wordt deze bit altijd ingesteld op 1.
  • De lokale APIC van de hypervisor kan mogelijk geen virtuele SMIS's genereren (systeembeheeronderbreken).
  • Als aan meerdere virtuele processors binnen een partitie identieke APIC-id's worden toegewezen, is het gedrag van gerichte interruptlevering gebonden aan niet-gedefinieerde. Dat wil gezegd, de hypervisor is vrij om de interrupt te leveren aan slechts één virtuele processor, alle virtuele processors met de opgegeven APIC-id of geen virtuele processors. Deze situatie wordt beschouwd als een gastprogrammeerfout.
  • Sommige van de in het geheugen toegewezen APIC-registers zijn mogelijk toegankelijk via virtuele MSR's.
  • De hypervisor staat mogelijk niet toe dat een gast de APIC-id's kan wijzigen.

In de resterende delen van deze sectie worden alleen de aspecten van synIC-functionaliteit beschreven die uitbreidingen van de lokale APIC zijn.

Lokale APIC MSR-toegang (alleen x64)

Op x64-platforms biedt de hypervisor versnelde MSR-toegang tot APIC-registers met hoog gebruiksgeheugen. Dit zijn de TPR-, EOI- en ICR-registers. De ICR low- en ICR high registers worden gecombineerd in één MSR. Om prestatieredenen moet het gastbesturingssysteem de aanbeveling van de hypervisor volgen voor het gebruik van de APIC MSR's.

Deze MSR's zijn niet beschikbaar op ARM64-platforms, waarbij interruptcontrollerbewerkingen worden uitgevoerd via de virtuele GIC-interface.

MSR-adres Registernaam Description
0x40000070 HV_X64_MSR_EOI Hiermee opent u de APIC EOI
0x40000071 HV_X64_MSR_ICR Hiermee opent u de APIC ICR-high en ICR-low
0x40000072 HV_X64_MSR_TPR Toegang tot de APIC-TPR

HV_X64_MSR_EOI

Bits Description Attributes
63:32 RsvdZ (gereserveerd, moet nul zijn) Write
31:0 EOI-waarde Write

HV_X64_MSR_ICR

Bits Description Attributes
63:32 Hoge ICR-waarde Lezen/schrijven
31:0 Lage ICR-waarde Lezen/schrijven

HV_X64_MSR_TPR

Bits Description Attributes
63:8 RsvdZ (gereserveerd, moet nul zijn) Lezen/schrijven
7:0 TPR-waarde Lezen/schrijven

Deze MSR is bedoeld om de toegang tot de TPR in gastpartities in de 32-bits modus te versnellen. Gastpartities in de 64-bits modus moeten de TPR instellen via CR8.

Synthetische cluster-IPI

De hypervisor ondersteunt hypercalls waarmee virtuele vaste interrupts naar een willekeurige set virtuele processors kunnen worden verzonden.

Hypercall Description
HvCallSendSyntheticClusterIpi Hiermee wordt een virtuele vaste interrupt verzonden naar de opgegeven virtuele processorset.
HvCallSendSyntheticClusterIpiEx Net als bij HvCallSendSyntheticClusterIpi, wordt een sparse VP-set als invoer gebruikt.

EOI Assist (alleen x64)

Op x64-platforms is één veld op de pagina Virtual Processor Assist het veld EOI Assist. Het veld EOI Assist bevindt zich op offset 0 van de overlaypagina en is 32 bits groot. De indeling van het veld EOI Assist is als volgt:

Deze verlichting is niet beschikbaar op ARM64-platforms, waarbij EOI-bewerkingen worden uitgevoerd via de virtuele GIC-interface.

Bits Description Attributes
31:1 RsvdZ Lezen/schrijven
0 Geen EOI vereist Lezen/schrijven

Het gastbesturingssystemen voeren een EOI uit door nul te schrijven naar het veld EOI Assist van de pagina virtuele VP Assist en te controleren of het veld 'Geen EOI vereist' eerder nul was. Als dat zo was, moet het besturingssysteem naar de HV_X64_MSR_EOI MSR schrijven, waardoor een snijpunt in de hypervisor wordt geactiveerd. De volgende code wordt aanbevolen om een EOI uit te voeren:

lea rcx, [VirtualApicAssistVa]
btr [rcx], 0
jc NoEoiRequired

mov ecx, HV_X64_MSR_EOI
wrmsr

NoEoiRequired:

De hypervisor stelt de bit 'Geen EOI vereist' in wanneer een virtuele interrupt wordt geïnjecteerd als aan de volgende voorwaarden wordt voldaan:

  • De virtuele interrupt wordt door edge geactiveerd en
  • Er zijn geen onderbrekingen met een lagere prioriteit in behandeling

Als op een later tijdstip een interrupt met een lagere prioriteit wordt aangevraagd, wist de hypervisor de 'Geen EOI vereist' zodat een volgende EOI een snijpunt veroorzaakt.

Bij geneste interrupts wordt het EOI-snijpunt alleen vermeden voor de interrupt met de hoogste prioriteit. Dit is nodig omdat er geen telling wordt onderhouden voor het aantal EO's dat door het besturingssysteem wordt uitgevoerd. Daarom kan alleen de eerste EOI worden vermeden en omdat de eerste EOI de bit 'Geen EOI vereist' wist, genereert de volgende EOI een snijpunt. Geneste interrupts zijn echter zeldzaam, dus dit is geen probleem in het algemene geval.

Houd er rekening mee dat apparaten en/of de I/O APIC (fysiek of synthetische) niet op de hoogte hoeven te worden gesteld van een EOI voor een door edge geactiveerde interrupt: de hypervisor onderschept dergelijke EO's alleen om de virtuele APIC-status bij te werken. In sommige gevallen kan de virtuele APIC-status lazily worden bijgewerkt. In dergelijke gevallen wordt de bit 'NoEoiRequired' ingesteld door de hypervisor die aangeeft aan de gast dat een EOI-snijpunt niet nodig is. In een later stadium kan de hypervisor de status van de lokale APIC afleiden, afhankelijk van de huidige waarde van de bit 'NoEoiRequired'.

Het in- en uitschakelen van deze verlichting kan op elk gewenst moment onafhankelijk van de onderbrekingsactiviteit en de APIC-status op dat moment worden uitgevoerd. Hoewel de verlichting is ingeschakeld, kunnen conventionele EO's nog steeds worden uitgevoerd, ongeacht de waarde 'Geen EOI vereist', maar ze zullen het prestatievoordeel van de verlichting niet realiseren.