Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De interface van de virtuele machine die door elke partitie wordt weergegeven, bevat een geheugenbeheereenheid (MMU). De virtuele MMU die door hypervisorpartities wordt weergegeven, is over het algemeen compatibel met bestaande MMU's.
De virtuele MMU-implementatie is architectuurspecifiek. In dit document worden zowel x64- als ARM64-platforms behandeld, waarbij platformspecifieke secties duidelijk zijn gemarkeerd.
Overzicht van Virtual MMU
Virtuele processors maken virtueel geheugen beschikbaar en een virtuele TLB (translation look-aside buffer), waarmee vertalingen van virtuele adressen naar (gast) fysieke adressen in de cache worden opgeslagen. Net als bij de TLB op een logische processor is de virtuele TLB een niet-coherente cache en is deze niet-coherentie zichtbaar voor gasten. De hypervisor maakt bewerkingen beschikbaar om de TLB leeg te maken. Gasten kunnen deze bewerkingen gebruiken om mogelijk inconsistente vermeldingen te verwijderen en virtuele adresvertalingen voorspelbaar te maken.
Compatibility
De virtuele MMU die door de hypervisor wordt weergegeven, is over het algemeen compatibel met de fysieke MMU die in de onderliggende processorarchitectuur wordt gevonden.
Op x64 Platforms
De virtuele MMU op x64-platforms is over het algemeen compatibel met de fysieke MMU die in een x64-processor is gevonden. De volgende waarneembare verschillen voor gasten bestaan:
- De CR3. PWT en CR3. PCD-bits worden mogelijk niet ondersteund in sommige hypervisor-implementaties. Bij dergelijke implementaties wordt elke poging van de gast om deze vlaggen in te stellen via een MOV naar CR3-instructie of een taakpoortschakelaar genegeerd. Pogingen om deze bits programmatisch in te stellen via HvSetVpRegisters of HvCallSwitchVirtualAddressSpace kunnen leiden tot een fout.
- De PWT- en PCD-bits binnen een bladpaginatabelvermelding (bijvoorbeeld een PTE voor 4 K-pagina's en een PDE voor grote pagina's) geven de cachebaarheid van de pagina die wordt toegewezen. De PAT-, PWT- en PCD-bits binnen niet-leaf-paginatabelvermeldingen geven de cachebaarheid van de volgende paginatabel in de hiërarchie aan. Sommige hypervisor-implementaties ondersteunen deze vlaggen mogelijk niet. Bij dergelijke implementaties worden alle paginatabeltoegangen uitgevoerd door de hypervisor met behulp van cachekenmerken voor write-back. Dit is met name van invloed op geopende en vuile bits die naar de tabelvermeldingen van de pagina worden geschreven. Als de gast de PAT-, PWT- of PCD-bits instelt in niet-leaf paginatabelvermeldingen, kan er een bericht worden gegenereerd dat niet wordt ondersteund wanneer een virtuele processor een pagina opent die is toegewezen door die paginatabel.
- De bit CR0.CD (cache uitschakelen) wordt mogelijk niet ondersteund in sommige hypervisor-implementaties. Voor dergelijke implementaties moet de CR0.CD bit worden ingesteld op 0. Elke poging van de gast om deze vlag in te stellen via een MOV naar CR0-instructie wordt genegeerd. Pogingen om deze bit programmatisch in te stellen via HvSetVpRegisters, leiden tot een fout.
- De PAT (paginaadrestype) MSR is een register per VP. Wanneer echter alle virtuele processors in een partitie de PAT MSR op dezelfde waarde instellen, wordt het nieuwe effect een partitiebreed effect.
- Om redenen van beveiliging en isolatie wordt de INVD-instructie gevirtualiseerd om te fungeren als een WBINVD-instructie, met enkele verschillen. Voor beveiligingsdoeleinden moet CLFLUSH in plaats daarvan worden gebruikt.
Verouderde TLB-beheerbewerkingen
Elke architectuur biedt systeemeigen mechanismen voor het beheren van de TLBs van de processor. Deze mechanismen worden gevirtualiseerd door de hypervisor en zijn alleen van invloed op de lokale virtuele processor. Als u vertalingen op andere virtuele processors ongeldig wilt maken, moet software architectuurspecifieke interprocessoronderbreken of de verbeterde TLB-beheerhypcalls gebruiken die in de volgende sectie worden beschreven.
Op x64 Platforms
De x64-architectuur biedt de volgende TLB-beheermechanismen:
- Met de INSTRUCTIE INVLPG wordt de vertaling voor één pagina van de TLB van de processor ongeldig. Als het opgegeven virtuele adres oorspronkelijk is toegewezen als een pagina van 4 K, wordt de vertaling voor deze pagina verwijderd uit de TLB. Als het opgegeven virtuele adres oorspronkelijk is toegewezen als een 'grote pagina' (ofwel 2 MB of 4 MB, afhankelijk van de MMU-modus), wordt de vertaling voor de hele grote pagina verwijderd uit de TLB. De INVLPG-instructie spoelt zowel globale als niet-globale vertalingen. Globale vertalingen worden gedefinieerd als de 'globale' bits die zijn ingesteld in de vermelding van de paginatabel.
- De MOV naar CR3-instructie - en taakswitches die CR3 wijzigen, ongeldige vertalingen voor alle niet-globale pagina's binnen de TLB van de processor.
- Een MOV naar CR4-instructie die de CR4 wijzigt. PGE-bit (algemene pagina inschakelen), cr4. PSE-bit (extensies voor paginaformaat) of CR4. De PAE-bit (paginaadresextensies) is ongeldig voor alle vertalingen (globaal en niet-globaal) binnen de TLB van de processor.
Houd er rekening mee dat al deze ongeldigheidsbewerkingen slechts één processor beïnvloeden. Als u vertalingen op andere processors ongeldig wilt maken, moet software gebruikmaken van een op software gebaseerd "TLB shoot-down"-mechanisme (meestal geïmplementeerd met behulp van interrupts tussen processen).
Op ARM64-platforms
De ARM64-architectuur biedt TLB-beheermechanismen via de TLBI-instructies (TLB Invalidate). Raadpleeg de handleiding van de ARM-architectuur voor meer informatie.
Opmerking: Onderhoudsinstructies voor cache instellen/way (zoals DC ISW, DC CSW, DC CISW) worden niet ondersteund in gevirtualiseerde omgevingen en worden behandeld als no-ops.
Virtuele TLB-verbeteringen
Naast het ondersteunen van de verouderde TLB-beheermechanismen die eerder zijn beschreven, ondersteunt de hypervisor op x64-platforms ook een set verbeteringen waarmee een gast de virtuele TLB efficiënter kan beheren. Deze verbeterde bewerkingen kunnen door elkaar worden gebruikt met verouderde TLB-beheerbewerkingen.
De hypervisor ondersteunt de volgende hypercalls om TLBs ongeldig te maken:
| Hypercall | Description |
|---|---|
| HvCallFlushVirtualAddressSpace | Ongeldig alle virtuele TLB-vermeldingen die deel uitmaken van een opgegeven adresruimte. |
| HvCallFlushVirtualAddressSpaceEx | Net als HvCallFlushVirtualAddressSpace wordt een sparse VP-set als invoer gebruikt. |
| HvCallFlushVirtualAddressList | Hiermee wordt een gedeelte van de opgegeven adresruimte ongeldig. |
| HvCallFlushVirtualAddressListEx | Net als Bij HvCallFlushVirtualAddressList wordt een sparse VP-set als invoer gebruikt. |
Op sommige systemen (die met voldoende virtualisatieondersteuning in hardware) zijn de verouderde TLB-beheerinstructies mogelijk sneller voor lokale of externe TLB-ongeldigheid (crossprocessor). Gasten die geïnteresseerd zijn in optimale prestaties, moeten het CPUID-bladblad 0x40000004 gebruiken om te bepalen welk gedrag moet worden geïmplementeerd met behulp van hypercalls:
- UseHypercallForAddressSpaceSwitch: als deze vlag is ingesteld, moet de beller ervan uitgaan dat het sneller is om HvCallSwitchVirtualAddressSpace te gebruiken om tussen adresruimten te schakelen. Als deze vlag duidelijk is, wordt een MOV naar CR3-instructie aanbevolen.
- UseHypercallForLocalFlush: Als deze vlag is ingesteld, moet de beller ervan uitgaan dat het sneller is om hypercalls (in tegenstelling tot INVLPG of MOV naar CR3) te gebruiken om een of meer pagina's van de virtuele TLB te verwijderen.
- UseHypercallForRemoteFlushAndLocalFlushEntire: Als deze vlag is ingesteld, moet de beller ervan uitgaan dat het sneller hypercalls (in tegenstelling tot het gebruik van door gasten gegenereerde interprocessoronderbreken) is om een of meer pagina's van de virtuele TLB te verwijderen.
Op ARM64-platforms moeten gasten over het algemeen architectuurmechanismen gebruiken voor TLB-beheer.
Overzicht van Geheugencachebeheer
De hypervisor ondersteunt door gasten gedefinieerde cachebaarheidsinstellingen voor pagina's die zijn toegewezen binnen de GVA-ruimte van de gast. Raadpleeg de Intel- of AMD-documentatie voor een gedetailleerde beschrijving van de beschikbare cachebaarheidsinstellingen en hun betekenissen.
Wanneer een virtuele processor een pagina opent via de GVA-ruimte, eert de hypervisor de cachekenmerk-bits (PAT, PWT en PCD) binnen de vermelding van de gastpaginatabel die wordt gebruikt om de pagina toe te wijzen. Deze drie bits worden gebruikt als een index in het PAT-register van de partitie (paginaadrestype) om de uiteindelijke cache-instelling voor de pagina op te zoeken.
Pagina's die rechtstreeks worden geopend via de GPA-ruimte (bijvoorbeeld wanneer paging is uitgeschakeld omdat CR0.PG is gewist), gebruiken een cachebaarheid die is gedefinieerd door de MTRR's. Als de hypervisor-implementatie geen ondersteuning biedt voor virtuele MTRR's, wordt uitgegaan van de WB-cachebaarheid.
Cachetypen combineren tussen een partitie en de Hypervisor
Gasten moeten er rekening mee houden dat sommige pagina's binnen de GPA-ruimte toegankelijk zijn voor de hypervisor. De volgende lijst bevat enkele voorbeelden, hoewel deze niet volledig zijn:
- Pagina's die invoer- of uitvoerparameters voor hypercalls bevatten
- Alle overlaypagina's, inclusief de hypercall-pagina, SynIC SIEF- en SIM-pagina's en statistiekenpagina's
- VP assisteert pagina's en andere hypervisorinterfacepagina's
De hypervisor voert altijd toegang tot hypercall-parameters en overlaypagina's uit met behulp van Write-Back kenmerken die in de cache kunnen worden opgeslagen:
- Op x64-platformen: WB (Write-Back) cachetype via PAT
- Op ARM64-platformen: normaal geheugen met interne en externe write-back, leestoewijzing, Write-Allocate kenmerken
De hypervisor voert altijd toegang tot hypercall-parameters en overlaypagina's uit met behulp van de instelling WB cacheability.