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.
In dit document worden belangrijke wijzigingen in de standaardinstelling en het aanbevolen gebruik van hypervisorplannertypen van Hyper-V beschreven. Deze wijzigingen zijn van invloed op zowel systeembeveiliging als virtualisatieprestaties. Beheerders van virtualisatiehosts moeten de wijzigingen en implicaties die in dit document worden beschreven, bekijken en begrijpen, en zorgvuldig de gevolgen, voorgestelde implementatierichtlijnen en risicofactoren evalueren om het beste inzicht te krijgen in het implementeren en beheren van Hyper-V hosts ten opzichte van het snel veranderende beveiligingslandschap.
Important
Momenteel bekende beveiligingsproblemen in side-channel die in meerdere processorarchitecturen worden gezien, kunnen worden misbruikt door een schadelijke gast-VM via het planningsgedrag van het verouderde klassieke scheduler-type hypervisor wanneer deze wordt uitgevoerd op hosts waarvoor SMT (Gelijktijdige multithreading) is ingeschakeld. Als deze is misbruikt, kan een kwaadwillende workload gegevens buiten de partitiegrens observeren. Deze aanvalsklasse kan worden beperkt door de Hyper-V hypervisor te configureren voor het gebruik van het type hypervisor core scheduler en het opnieuw configureren van gast-VM's. Met de core scheduler beperkt de hypervisor de virtuele processors (VP's) van een gast-VM tot het draaien op dezelfde fysieke processorkern, waardoor de mogelijkheid van de virtuele machine om toegang te krijgen tot gegevens sterk wordt geïsoleerd binnen de grenzen van de fysieke kern waarop hij draait. Dit is een zeer effectieve beperking tegen deze side-channel-aanvallen, waardoor de VM geen artefacten van andere partities kan observeren, ongeacht of de hoofd- of een andere gastpartitie. Daarom wijzigt Microsoft de standaard- en aanbevolen configuratie-instellingen voor virtualisatiehosts en gast-VM's.
Background
Vanaf Windows Server 2016 ondersteunt Hyper-V verschillende methoden voor het plannen en beheren van virtuele processors, ook wel hypervisorplannertypen genoemd. Een gedetailleerde beschrijving van alle typen hypervisorplanners vindt u in Understanding and using Hyper-V hypervisor scheduler types.
Note
Nieuwe typen hypervisorplanners zijn voor het eerst geïntroduceerd met Windows Server 2016 en zijn niet beschikbaar in eerdere versies. Alle versies van Hyper-V vóór Windows Server 2016 ondersteunen alleen de klassieke planner. Ondersteuning voor de kernscheduler is pas recent gepubliceerd.
Over hypervisorplannertypen
Dit artikel richt zich specifiek op het gebruik van het nieuwe type hypervisor core scheduler versus de oudere "klassieke" scheduler, en hoe deze scheduler-typen elkaar kruisen met het gebruik van Symmetrische multithreading of SMT. Het is belangrijk om inzicht te hebben in de verschillen tussen de kern- en klassieke schedulers en hoe elk van hen taken van gast-VM's op de onderliggende systeemprocessors plaatst.
De klassieke planner
De klassieke scheduler verwijst naar de fair-share- round robin-methode voor het plannen van werkzaamheden op virtuele processors (VPs) in het systeem, inclusief hoofd-VPs en VM's die behoren tot gast-VM's. De klassieke planner is het standaardtype scheduler dat wordt gebruikt voor alle versies van Hyper-V (tot Windows Server 2019, zoals hier wordt beschreven). De prestatiekenmerken van de klassieke planner zijn goed begrepen, en de klassieke planner blijkt in staat om overinschrijvingen op workloads effectief te ondersteunen, met andere woorden, om de VP:LP-verhouding van de host met een redelijke marge te overschrijden (afhankelijk van de soorten workloads die worden gevirtualiseerd, het algemeen resourcegebruik, enzovoort).
Wanneer deze wordt uitgevoerd op een virtualisatiehost met ingeschakelde SMT, plant de klassieke planner gast-VP's van elke VM op elke SMT-thread die onafhankelijk tot een kern behoren. Daarom kunnen verschillende VM's tegelijkertijd op dezelfde kern worden uitgevoerd (één VM die wordt uitgevoerd op één thread van een kern terwijl een andere VM wordt uitgevoerd op de andere thread).
De kernplanner
De core scheduler maakt gebruik van de eigenschappen van SMT om isolatie van gastworkloads te bieden, wat van invloed is op zowel de beveiliging als de systeemprestaties. De core scheduler zorgt ervoor dat VPs van een VM worden gepland op verwante SMT-threads. Dit wordt symmetrisch gedaan, zodat als LPs zich in groepen van twee bevinden, VM's in groepen van twee worden gepland en een cpu-kern van het systeem nooit wordt gedeeld tussen vm's.
Door gast-VP's op onderliggende SMT-paren te plannen, biedt de kernplanner een sterke beveiligingsgrens voor workloadisolatie en kan hij ook worden gebruikt om de prestatievariabiliteit voor latentiegevoelige workloads te verminderen.
Houd er rekening mee dat wanneer de VP is gepland voor een virtuele machine zonder SMT ingeschakeld, dat VP de volledige kern verbruikt wanneer deze wordt uitgevoerd en dat de kern-zelfde SMT-thread inactief blijft. Dit is nodig om de juiste workloadisolatie te bieden, maar heeft invloed op de algehele systeemprestaties, met name wanneer de systeem-LP's overbezet raken, dat wil zeggen, wanneer de totale VP:LP-verhouding groter is dan 1:1. Daarom is het uitvoeren van gast-VM's die zijn geconfigureerd zonder meerdere threads per kern een suboptimale configuratie.
Voordelen van het gebruik van de core scheduler
De core scheduler biedt de volgende voordelen:
Een sterke veiligheidsgrens voor isolatie van gastworkloads: gast-VM's (virtuele machines) zijn beperkt om te draaien op onderliggende fysieke processorkernen in paren, waardoor kwetsbaarheid voor side-channel snooping-aanvallen wordt verminderd.
Verminderde variatie in werklast: de variatie in de doorvoer van gastenwerklasten is sterk verminderd, wat een grotere consistentie in werklasten biedt.
Gebruik van SMT in gast-VM's: het besturingssysteem en de toepassingen die op de virtuele gastmachine worden uitgevoerd, kunnen gebruikmaken van SMT-gedrag en programmeerinterfaces (API's) om werk over SMT-threads te beheren en te distribueren, net zoals wanneer ze niet-gevirtualiseerd worden uitgevoerd.
De core scheduler wordt momenteel gebruikt op Azure-virtualisatiehosts, met name om te profiteren van de sterke beveiligingsscheiding en de lage variabiliteit van de workload. Microsoft is van mening dat het type kernplanner moet zijn en dat dit het standaardtype voor hypervisorplanning blijft voor het merendeel van de virtualisatiescenario's. Om ervoor te zorgen dat onze klanten standaard veilig zijn, maakt Microsoft deze wijziging nu voor Windows Server 2019.
Impact van de prestaties van de core scheduler op gastworkloads
Hoewel het nodig is om bepaalde klassen beveiligingsproblemen effectief te beperken, kan de kernplanner ook de prestaties verminderen. Klanten kunnen mogelijk een verschil merken in de prestatiekenmerken bij hun VM's en de impact op de totale workloadcapaciteit van hun virtualisatiehosts. In gevallen waarin de kernplanner een niet-SMT VP moet uitvoeren, wordt slechts één van de instructiestromen in de onderliggende logische kern uitgevoerd terwijl de andere niet-actief moet blijven. Hiermee wordt de totale hostcapaciteit voor gastworkloads beperkt.
Deze gevolgen voor prestaties kunnen worden geminimaliseerd door de implementatierichtlijnen in dit document te volgen. Hostbeheerders moeten zorgvuldig rekening houden met hun specifieke implementatiescenario's voor virtualisatie en hun tolerantie voor beveiligingsrisico's afwegen tegen de behoefte aan maximale workloaddichtheid, consolidatie van virtualisatiehosts, enzovoort.
Wijzigingen in de standaard- en aanbevolen configuraties voor Windows Server 2016 en Windows Server 2019
Voor het implementeren van Hyper-V hosts met het maximale beveiligingspostuur is het gebruik van het type hypervisor core scheduler vereist. Om ervoor te zorgen dat onze klanten standaard veilig zijn, wijzigt Microsoft de volgende standaardinstellingen en aanbevolen instellingen.
Note
Hoewel de interne ondersteuning van de hypervisor voor de scheduler-typen is opgenomen in de eerste versie van Windows Server 2016, Windows Server 1709 en Windows Server 1803, zijn updates vereist om toegang te krijgen tot het configuratiebeheer waarmee het hypervisorplannertype kan worden geselecteerd. Raadpleeg Understanding and using Hyper-V hypervisor scheduler types for details on these updates (Informatie over en het gebruik van Hyper-V hypervisorplannertypen ) voor meer informatie over deze updates.
Wijzigingen in virtualisatiehost
De hypervisor gebruikt standaard de core scheduler vanaf Windows Server 2019.
Microsoft stelt voor om de core scheduler in Windows Server 2016 te configureren. Het type hypervisor core scheduler wordt ondersteund in Windows Server 2016, maar de standaardinstelling is de klassieke scheduler. De core scheduler is optioneel en moet expliciet worden ingeschakeld door de Hyper-V hostbeheerder.
Configuratiewijzigingen van virtuele machines
Op Windows Server 2019 nemen nieuwe virtuele machines die zijn gemaakt met de standaard-VM-versie 9.0 automatisch de SMT-eigenschappen (ingeschakeld of uitgeschakeld) van de virtualisatiehost over. Als SMT is ingeschakeld op de fysieke host, worden nieuw gemaakte VM's ook SMT ingeschakeld en wordt de SMT-topologie van de host standaard overgenomen, waarbij de VM hetzelfde aantal hardwarethreads per kern heeft als het onderliggende systeem. Dit wordt weerspiegeld in de configuratie van de VIRTUELE machine met HwThreadCountPerCore = 0, waarbij 0 aangeeft dat de VM de SMT-instellingen van de host moet overnemen.
Bestaande virtuele machines met een VM-versie van 8.2 of eerder behouden hun oorspronkelijke VM-processorinstelling voor HwThreadCountPerCore en de standaardinstelling voor 8.2 VM-versiegasten is HwThreadCountPerCore = 1. Wanneer deze gasten draaien op een Windows Server 2019-host, worden ze als volgt behandeld:
Als de VM een aantal VP's heeft dat kleiner is dan of gelijk is aan het aantal LP-kernen, wordt de virtuele machine behandeld als een niet-SMT-VM door de corescheduler. Wanneer de gast-VP wordt uitgevoerd op één SMT-thread, wordt de kern-zelfde SMT-thread inactief. Dit is niet optimaal en resulteert in een algemeen verlies van prestaties.
Als de VM meer VPs heeft dan LP-kernen, zal de VM door de kernplanner als een SMT-VM worden behandeld. De VIRTUELE machine ziet echter geen andere aanwijzingen dat deze een SMT-VM is. Gebruik bijvoorbeeld van de CPUID-instructie of Windows-API's om een query uit te voeren op CPU-topologie door het besturingssysteem of toepassingen geeft niet aan dat SMT is ingeschakeld.
Wanneer een bestaande VM expliciet wordt bijgewerkt van eariler-VM-versies naar versie 9.0 via de Update-VM-bewerking, behoudt de VIRTUELE machine de huidige waarde voor HwThreadCountPerCore. De VM zal niet geforceerd SMT ingeschakeld hebben.
Op Windows Server 2016 raadt Microsoft aan SMT in te schakelen voor gast-VM's. Vm's die zijn gemaakt op Windows Server 2016, zouden standaard SMT hebben uitgeschakeld. Dit is HwThreadCountPerCore is ingesteld op 1, tenzij expliciet gewijzigd.
Note
Windows Server 2016 biedt geen ondersteuning voor het instellen van HwThreadCountPerCore op 0.
SMT-configuratie van virtuele machines beheren
De SMT-configuratie van de gast-VM wordt per VM ingesteld. De hostbeheerder kan de SMT-configuratie van een VIRTUELE machine controleren en configureren om een keuze te maken uit de volgende opties:
VM's configureren om als SMT ingeschakeld uit te voeren, waarbij ze automatisch de SMT-topologie van de host kunnen overnemen.
Virtuele machines configureren om als niet-SMT te draaien
De SMT-configuratie voor een VIRTUELE machine wordt weergegeven in de samenvattingsvensters in de Hyper-V Manager-console. Het configureren van SMT-instellingen van een VIRTUELE machine kan worden uitgevoerd met behulp van de VM-instellingen of PowerShell.
SMT-instellingen voor VM's configureren met Behulp van PowerShell
Als u de SMT-instellingen voor een virtuele gastmachine wilt configureren, opent u een PowerShell-venster met voldoende machtigingen en typt u:
Set-VMProcessor -VMName <VMName> -HwThreadCountPerCore <0, 1, 2>
Where:
0 = SMT-topologie overnemen van de host (deze instelling van HwThreadCountPerCore=0 wordt niet ondersteund op Windows Server 2016)
1 = Niet-SMT
Waarden > 1 = het gewenste aantal SMT-threads per kern. Mag het aantal fysieke SMT-threads per kern niet overschrijden.
Als u de SMT-instellingen voor een virtuele gastmachine wilt lezen, opent u een PowerShell-venster met voldoende machtigingen en typt u:
(Get-VMProcessor -VMName <VMName>).HwThreadCountPerCore
Houd er rekening mee dat gast-VM's die zijn geconfigureerd met HwThreadCountPerCore = 0, aangeeft dat SMT wordt ingeschakeld voor de gast en hetzelfde aantal SMT-threads beschikbaar maakt als op de onderliggende virtualisatiehost, meestal 2.
Gast-VM's kunnen wijzigingen in de CPU-topologie in VM-mobiliteitsscenario's observeren
Het besturingssysteem en de toepassingen in een VIRTUELE machine kunnen wijzigingen zien in zowel host- als VM-instellingen voor en na de levenscyclusgebeurtenissen van de VM, zoals livemigratie of het opslaan en herstellen van bewerkingen. Tijdens een bewerking waarin de VM-status wordt opgeslagen en hersteld, worden zowel de HwThreadCountPerCore-instelling van de VIRTUELE machine als de gerealiseerde waarde (dat wil gezegd de berekende combinatie van de instelling van de VM en de configuratie van de bronhost) gemigreerd. De virtuele machine blijft draaien met deze instellingen op de bestemmingshost. Op het moment dat de VM wordt afgesloten en opnieuw wordt gestart, is het mogelijk dat de gerealiseerde waarde die door de VIRTUELE machine wordt waargenomen, wordt gewijzigd. Dit moet goedaardig zijn, omdat besturingssysteem- en toepassingslaagsoftware moet zoeken naar informatie over de CPU-topologie als onderdeel van hun normale opstart- en initialisatiecodestromen. Omdat deze initialisatiereeksen voor opstarttijd echter worden overgeslagen tijdens livemigratie of bewerkingen voor opslaan/herstellen, kunnen VM's die deze statusovergangen ondergaan, de oorspronkelijk berekende waarde observeren totdat ze worden afgesloten en opnieuw worden gestart.
Waarschuwingen met betrekking tot niet-optimale VM-configuraties
Virtuele machines die zijn geconfigureerd met meer VM's dan er fysieke kernen op de host zijn, resulteren in een niet-optimale configuratie. De hypervisorplanner behandelt deze VM's alsof ze SMT-bewust zijn. Het besturingssysteem en de toepassingssoftware op de VIRTUELE machine krijgen echter een CPU-topologie te zien waarin wordt opgegeven dat SMT is uitgeschakeld. Wanneer deze voorwaarde wordt gedetecteerd, wordt met het Hyper-V Worker Process een gebeurtenis op de virtualisatiehost vastgelegd, waarbij de hostbeheerder wordt gewaarschuwd dat de configuratie van de VIRTUELE machine niet optimaal is en dat SMT wordt aanbevolen voor de VIRTUELE machine.
Niet-optimaal geconfigureerde VM's identificeren
U kunt niet-SMT-VM's identificeren door in de Logboekenviewer het systeemlogboek te bekijken voor gebeurtenis-id 3498 van het Hyper-V-werkproces. Dit wordt geactiveerd voor een VM wanneer het aantal virtuele processors in de VM groter is dan het aantal fysieke kernen. Werkprocesgebeurtenissen kunnen worden verkregen via de Logboeken, of via PowerShell.
Query's uitvoeren op de vm-gebeurtenis van het Hyper-V-werkproces met behulp van PowerShell
Als u een query wilt uitvoeren voor Hyper-V werkproces gebeurtenis-id 3498 met behulp van PowerShell, voert u de volgende opdrachten uit vanaf een PowerShell-prompt.
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Worker"; ID=3498}
Gevolgen van gast-SMT-configuratie over het gebruik van hypervisor-verlichting voor gastbesturingssystemen
De Microsoft-hypervisor biedt meerdere optimalisaties of hints, die het besturingssysteem dat wordt uitgevoerd op een gast-VM, kan opvragen en gebruiken om optimalisaties te activeren, zoals optimalisaties die de prestaties kunnen verbeteren of op andere manieren de verwerking van verschillende omstandigheden kunnen verbeteren bij het uitvoeren van virtualisatie. Een recent geïntroduceerd inzicht betreft de afhandeling van virtuele processorplanning en het gebruik van OS-mitigaties voor side-channel-aanvallen die SMT uitbuiten.
Note
Microsoft raadt aan dat hostbeheerders SMT inschakelen voor gast-VM's om de workloadprestaties te optimaliseren.
De details van deze gastverlichting worden hieronder gegeven, maar de belangrijkste les voor virtualisatiehostbeheerders is dat virtuele machines HwThreadCountPerCore zo moeten configureren dat deze overeenkomt met de fysieke SMT-configuratie van de host. Hierdoor kan de hypervisor rapporteren dat er geen niet-architectonische kerndeling is. Daarom kan elk gastbesturingssysteem dat ondersteuning biedt voor optimalisaties waarvoor kennis vereist is, worden ingeschakeld. Maak op Windows Server 2019 nieuwe VM's en laat de standaardwaarde HwThreadCountPerCore (0) staan. Oudere VM's die zijn gemigreerd van Windows Server 2016-hosts kunnen worden bijgewerkt naar de configuratieversie van Windows Server 2019. Daarna raadt Microsoft aan om HwThreadCountPerCore = 0 in te stellen. In Windows Server 2016 raadt Microsoft aan HwThreadCountPerCore in te stellen op basis van de hostconfiguratie (meestal 2).
Details van noNonArchitecturalCoreSharing-verlichting
Vanaf Windows Server 2016 definieert de hypervisor een nieuwe optimalisatie om VP-planning en plaatsing voor het gastbesturingssysteem te beschrijven. Dit inzicht wordt gedefinieerd in de Hypervisor Top Level Functional Specification v5.0c.
Hypervisor synthetische CPUID leaf CPUID.0x40000004.EAX:18[NoNonArchitecturalCoreSharing = 1] geeft aan dat een virtuele processor nooit een fysieke kern zal delen met een andere virtuele processor, behalve voor virtuele processors die worden gerapporteerd als sibling SMT-threads. Een gast-VP wordt bijvoorbeeld nooit uitgevoerd op een SMT-thread naast een hoofd-VP die tegelijkertijd wordt uitgevoerd op een smt-thread op hetzelfde processorkern. Deze voorwaarde is alleen mogelijk bij het uitvoeren van gevirtualiseerd en vertegenwoordigt dus een niet-architectonisch SMT-gedrag dat ook ernstige gevolgen heeft voor de beveiliging. Het gastbesturingssysteem kan NoNonArchitecturalCoreSharing = 1 gebruiken als indicatie dat het veilig is om optimalisaties in te schakelen, wat kan helpen om de prestatieoverhead van het instellen van STIBP te voorkomen.
In bepaalde configuraties geeft de hypervisor niet aan dat NoNonArchitecturalCoreSharing = 1. Als een host bijvoorbeeld SMT heeft ingeschakeld en is geconfigureerd voor het gebruik van de klassieke scheduler van de hypervisor, is NoNonArchitecturalCoreSharing 0. Hierdoor kunnen verlichte gasten bepaalde optimalisaties mogelijk niet inschakelen. Daarom raadt Microsoft aan dat hostbeheerders die SMT gebruiken, afhankelijk zijn van de hypervisorkernplanner en ervoor zorgen dat virtuele machines zijn geconfigureerd om hun SMT-configuratie over te nemen van de host om optimale workloadprestaties te garanderen.
Summary
Het beveiligingsrisicolandschap blijft zich ontwikkelen. Om ervoor te zorgen dat onze klanten standaard veilig zijn, wijzigt Microsoft de standaardconfiguratie voor de hypervisor en virtuele machines die beginnen in Windows Server 2019 Hyper-V en biedt bijgewerkte richtlijnen en aanbevelingen voor klanten met Windows Server 2016 Hyper-V. Beheerders van virtualisatiehosts moeten:
De richtlijnen in dit document lezen en begrijpen
Evalueer en pas hun virtualisatieimplementaties zorgvuldig aan om ervoor te zorgen dat ze voldoen aan de doelstellingen voor beveiliging, prestaties, virtualisatiedichtheid en responsiviteit van workloads voor hun unieke vereisten
Overweeg om bestaande Windows Server 2016-hosts opnieuw te configureren Hyper-V om gebruik te maken van de sterke beveiligingsvoordelen die worden geboden door de hypervisor core scheduler
Bestaande niet-SMT-VM's bijwerken om de prestatieimpact te verminderen van planningsbeperkingen die worden opgelegd door VP-isolatie die betrekking heeft op beveiligingsproblemen met hardware