Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I det här dokumentet beskrivs viktiga ändringar av Hyper-V:s standard och rekommenderad användning av hypervisor-schemaläggartyper. Dessa ändringar påverkar både systemsäkerhet och virtualiseringsprestanda. Virtualiseringsvärdadministratörer bör granska och förstå de ändringar och konsekvenser som beskrivs i det här dokumentet och noggrant utvärdera effekterna, föreslagna distributionsvägledning och riskfaktorer för att på bästa sätt förstå hur man distribuerar och hanterar Hyper-V värdar inför det snabbt föränderliga säkerhetslandskapet.
Important
För närvarande kan kända säkerhetsrisker i sidokanaler som har upptäckts i flera processorarkitekturer utnyttjas av en skadlig virtuell gästmaskin genom schemaläggningsbeteendet hos den äldre klassiska hypervisor-schemaläggaren när den körs på värdar med SMT (Simultaneous Multithreading) aktiverat. Om den utnyttjas framgångsrikt kan en skadlig nyttolast observera data utanför dess partitionsgräns. Den här typen av attacker kan minimeras genom att konfigurera Hyper-V hypervisor för att använda hypervisor core scheduler-typen och konfigurera om virtuella gästdatorer. Med kärnplaneraren begränsar hypervisor-programmet en gäst-VM:s virtuella processorer till att köras på samma fysiska processorkärna och därmed starkt begränsar den virtuella maskinens möjligheter att komma åt data till den fysiska kärnans gränser som den körs på. Detta är en mycket effektiv åtgärd mot dessa sidokanalattacker, vilket hindrar den virtuella datorn från att observera artefakter från andra partitioner, oavsett om det är roten eller någon annan gästpartition. Därför ändrar Microsoft standardinställningarna och rekommenderade konfigurationsinställningar för virtualiseringsvärdar och virtuella gästdatorer.
Background
Från och med Windows Server 2016 stöder Hyper-V flera metoder för schemaläggning och hantering av virtuella processorer, som kallas hypervisor-schemaläggningstyper. En detaljerad beskrivning av alla typer av hypervisor-schemaläggare finns i Förstå och använda Hyper-V hypervisor-schemaläggartyper.
Note
Nya typer av hypervisor-schemaläggare introducerades först med Windows Server 2016 och är inte tillgängliga i tidigare versioner. Alla versioner av Hyper-V före Windows Server 2016 stöder endast den klassiska schemaläggaren. Stöd för kärnschemaläggaren publicerades endast nyligen.
Om typer av hypervisor-schemaläggare
Den här artikeln fokuserar specifikt på användningen av den nya kärnschemahypervisorns typ jämfört med den äldre "klassiska" schemaläggaren, och hur dessa schemaläggartyper överlappar med användningen av symmetrisk multitrådning eller SMT. Det är viktigt att förstå skillnaderna mellan de grundläggande och klassiska schemaläggarna och hur varje plats fungerar från virtuella gästdatorer på de underliggande systemprocessorerna.
Den klassiska schemaläggaren
Den klassiska schemaläggaren refererar till metoden för rättvis resursfördelning och rundgång för schemaläggning av arbete på virtuella processorer (VP:er) i hela systemet – inklusive root-VP:er samt VP:er som tillhör gästdatorer. Den klassiska schemaläggaren har varit standardtyp av schemaläggare som används i alla versioner av Hyper-V (fram till Windows Server 2019, som beskrivs här). Prestandaegenskaperna för den klassiska schemaläggaren är väl förstådda, och den klassiska schemaläggaren visas kunna stödja överbokning av arbetsbelastningar – det vill säga, överbokning av värdens VP:LP-förhållande med en rimlig marginal (beroende på vilka typer av arbetsbelastningar som virtualiseras, övergripande resursanvändning osv.).
När den körs på en virtualiseringsvärd med SMT aktiverat, kommer den klassiska schemaläggaren att schemalägga gäst-VP:er från valfri virtuell maskin på varje SMT-tråd som tillhör en kärna, oberoende av varandra. Därför kan olika virtuella datorer köras på samma kärna samtidigt (en virtuell dator som körs på en tråd i en kärna medan en annan virtuell dator körs på den andra tråden).
Kärnschemaläggaren
Den grundläggande schemaläggaren utnyttjar egenskaperna för SMT för att tillhandahålla isolering av gästarbetsbelastningar, vilket påverkar både säkerhet och systemprestanda. Kärnschemaläggaren ser till att virtuella processorer (VPs) från en virtuell maskin (VM) schemaläggs på syskon SMT-trådar. Detta görs symmetriskt så att om IP-adresser finns i grupper om två schemaläggs virtuella datorer i grupper om två och en processorkärna för systemet delas aldrig mellan virtuella datorer.
Genom att schemalägga gäst-VPs på underliggande SMT-par erbjuder core scheduler en stark säkerhetsgräns för arbetsbelastningsisolering och kan också användas för att minska prestandavariationen för svarstidskänsliga arbetsbelastningar.
Observera att när VP:n schemaläggs på en virtuell maskin utan SMT aktiverat, kommer den virtuella processorn att förbruka hela kärnan när den körs och SMT-tråden på kärnans syskon lämnas inaktiv. Detta är nödvändigt för att tillhandahålla rätt arbetsbelastningsisolering, men påverkar den övergripande systemprestandan, särskilt när system-IP-adresserna blir överprenumererade, dvs. när det totala VP:LP-förhållandet överskrider 1:1. Därför är det en underoptimativ konfiguration att köra virtuella gästdatorer som konfigurerats utan flera trådar per kärna.
Fördelar med att använda kärnschemaläggaren
Den grundläggande schemaläggaren erbjuder följande fördelar:
En stark säkerhetsgräns för isolering av gästarbetsbelastningar – Gäst-VP:er är begränsade till att köras på underliggande fysiska kärnpar, vilket minskar sårbarheten för snokande attacker på sidokanaler.
Minskad variabilitet för arbetsbelastningar – Variabiliteten för gästarbetsbelastningens genomströmning minskar avsevärt, vilket ger större stabilitet i arbetsbelastningen.
Användning av SMT i virtuella gästdatorer – Operativsystemet och programmen som körs på den virtuella gästdatorn kan använda SMT-beteende och programmeringsgränssnitt (API:er) för att styra och distribuera arbete mellan SMT-trådar, precis som när de körs icke-virtualiserade.
Kärnschemaläggaren används i dagsläget på Azure-virtualiseringsvärdar, särskilt för att dra nytta av den starka säkerhetsgränsen och låga arbetsbelastningsvariabiliteten. Microsoft anser att den grundläggande scheduler-typen bör vara och fortsätter att vara standardschemaläggningstypen för hypervisor för de flesta virtualiseringsscenarier. För att säkerställa att våra kunder är säkra som standard gör Microsoft därför den här ändringen för Windows Server 2019 nu.
Grundläggande prestanda för schemaläggaren påverkar gästarbetsbelastningar
Även om det krävs för att effektivt minska vissa sårbarhetsklasser kan core scheduler också potentiellt minska prestandan. Kunder kan se en skillnad i prestandaegenskaperna med sina virtuella datorer och påverkar den totala arbetsbelastningskapaciteten för deras virtualiseringsvärdar. När kärnschemaläggaren måste köra en VP som inte är SMT, körs endast en av instruktionsströmmarna i den underliggande logiska kärnan medan den andra måste lämnas inaktiv. Detta begränsar den totala värdkapaciteten för gästarbetslaster.
Dessa prestandaeffekter kan minimeras genom att följa distributionsvägledningen i det här dokumentet. Värdadministratörer måste noga överväga sina specifika virtualiseringsdistributionsscenarier och balansera sin tolerans för säkerhetsrisker mot behovet av maximal arbetsbelastningstäthet, överkonsolidering av virtualiseringsvärdar osv.
Ändringar i standardkonfigurationerna och rekommenderade konfigurationer för Windows Server 2016 och Windows Server 2019
Distribution av Hyper-V värdar med maximal säkerhetsstatus kräver användning av hypervisor core scheduler-typen. För att säkerställa att våra kunder är säkra som standard ändrar Microsoft följande standardinställningar och rekommenderade inställningar.
Note
Hypervisor-programmets interna stöd för schemaläggningstyperna ingick i den första versionen av Windows Server 2016, Windows Server 1709 och Windows Server 1803, men uppdateringar krävs för att få åtkomst till konfigurationskontrollen som gör att du kan välja typen av hypervisor-schemaläggare. Mer information om dessa uppdateringar finns i Förstå och använda Hyper-V hypervisor scheduler-typer .
Virtualiseringsvärdändringar
Hypervisor-programmet använder som standard kärnschemaläggaren från och med Windows Server 2019.
Microsoft rekommenderar att du konfigurerar kärnschemaläggaren på Windows Server 2016. Hypervisor Core Scheduler-typen stöds i Windows Server 2016, men standardinställningen är den klassiska schemaläggaren. Kärnschemaläggaren är valfri och måste uttryckligen aktiveras av Hyper-V värdadministratör.
Konfigurationsändringar för virtuella datorer
På Windows Server 2019 kommer nya virtuella datorer som skapas med standardversionen 9.0 automatiskt att ärva SMT-egenskaperna (aktiverade eller inaktiverade) från virtualiseringsvärden. Om SMT är aktiverat på den fysiska värden kommer nyligen skapade virtuella maskiner också att ha SMT aktiverat och ärva SMT-topologin från värden som standard, vilket innebär att den virtuella maskinen har samma antal maskinvarutrådar per kärna som det underliggande systemet. Detta återspeglas i den virtuella datorns konfiguration med HwThreadCountPerCore = 0, där 0 anger att den virtuella datorn ska ärva värdmaskinens SMT-inställningar.
Befintliga virtuella datorer med en VM-version av 8.2 eller tidigare behåller sin ursprungliga processorinställning för virtuella datorer för HwThreadCountPerCore, och standardvärdet för 8,2 VM-versionsgäster är HwThreadCountPerCore = 1. När dessa gäster körs på en Windows Server 2019-värd, kommer de att behandlas på följande sätt:
Om den virtuella datorn har ett VP-antal som är mindre än eller lika med antalet LP-kärnor behandlas den virtuella datorn som en icke-SMT VM av kärnschemaläggaren. När gäst-VP:n körs på en singel SMT-tråd kommer kärnans syskontråd att vara inaktiv. Detta är inte optimalt och resulterar i total prestandaförlust.
Om den virtuella datorn har fler virtuella processorer än LP-kärnor behandlas den som en SMT virtuell maskin av kärnschemaläggaren. Den virtuella datorn observerar dock inte andra indikationer på att det är en virtuell SMT-dator. Exempelvis kommer användning av CPUID-instruktionen eller Windows-API:er för att fråga om CPU-topologi inte att indikera för operativsystemet eller applikationer att SMT är aktiverat.
När en befintlig virtuell dator uttryckligen uppdateras från eariler VM-versioner till version 9.0 via den Update-VM åtgärden behåller den virtuella datorn sitt aktuella värde för HwThreadCountPerCore. Den virtuella datorn kommer inte att ha SMT tvångsaktiverat.
På Windows Server 2016 rekommenderar Microsoft att du aktiverar SMT för virtuella gästdatorer. Som standard skulle virtuella datorer som skapats på Windows Server 2016 ha SMT inaktiverat, dvs. HwThreadCountPerCore är inställt på 1, om inte uttryckligen ändras.
Note
Windows Server 2016 stöder inte inställningen HwThreadCountPerCore till 0.
Hantera SMT-konfiguration för virtuell dator
SMT-konfigurationen för den virtuella gästdatorn anges per virtuell dator. Värdadministratören kan inspektera och konfigurera en virtuell dators SMT-konfiguration för att välja bland följande alternativ:
Konfigurera virtuella datorer att köras som SMT-aktiverade, om du vill ärva värd-SMT-topologin automatiskt
Konfigurera virtuella datorer att köras utan SMT
SMT-konfiguarationen för en virtuell dator visas i fönstret Sammanfattning i Hyper-V Manager-konsolen. Du kan konfigurera en virtuell dators SMT-inställningar med hjälp av VM-inställningarna eller PowerShell.
Konfigurera SMT-inställningar för virtuell dator med PowerShell
Om du vill konfigurera SMT-inställningarna för en virtuell gästdator öppnar du ett PowerShell-fönster med tillräcklig behörighet och skriver:
Set-VMProcessor -VMName <VMName> -HwThreadCountPerCore <0, 1, 2>
Where:
0 = Ärv SMT-topologi från värden (den här inställningen för HwThreadCountPerCore=0 stöds inte på Windows Server 2016)
1 = Icke-SMT
Värden > 1 = önskat antal SMT-trådar per kärna. Får inte överskrida antalet fysiska SMT-trådar per kärna.
Om du vill läsa SMT-inställningarna för en virtuell gästdator öppnar du ett PowerShell-fönster med tillräcklig behörighet och skriver:
(Get-VMProcessor -VMName <VMName>).HwThreadCountPerCore
Observera att gäst-VM:er som konfigurerats med HwThreadCountPerCore = 0 indikerar att SMT kommer att aktiveras för gästen och kommer att exponera samma antal SMT-trådar för gästen som de är på den underliggande virtualiseringsvärden, vanligtvis två.
Virtuella gästdatorer kan observera ändringar i CPU-topologin i mobilitetsscenarier för virtuella datorer
Operativsystemet och programmen på en virtuell dator kan se ändringar i både värd- och VM-inställningarna före och efter vm-livscykelhändelser, till exempel direktmigrering eller åtgärder för att spara och återställa. Under en operation där VM-tillståndet sparas och återställs överförs både den virtuella datorns HwThreadCountPerCore-inställning och det realiserade värdet (det vill säga den beräknade kombinationen av den virtuella datorns inställning och källvärdens konfiguration). Den virtuella datorn fortsätter att köras med de här inställningarna på måldatorn. När den virtuella datorn stängs av och startas på nytt är det möjligt att det realiserade värdet som observeras av den virtuella datorn ändras. Detta bör vara godartat eftersom programvara på operativsystem och programnivå bör leta efter information om CPU-topologi som en del av sina normala kodflöden för start och initiering. Men eftersom dessa starttidsinitieringssekvenser hoppas över under direktmigrering eller åtgärder för att spara/återställa, kan virtuella datorer som genomgår dessa tillståndsövergångar observera det ursprungligen beräknade realiserade värdet tills de stängs av och startas om.
Aviseringar om icke-optimala VM-konfigurationer
Virtuella datorer som konfigurerats med fler virtuella processorer än det finns fysiska kärnor på värden resulterar i en icke-optimal konfiguration. Hypervisor-schemaläggaren behandlar dessa virtuella datorer som om de är SMT-medvetna. Operativsystemet och applikationsprogramvaran på den virtuella datorn kommer istället att presenteras en CPU-topologi som visar att SMT är inaktiverad. När det här villkoret identifieras loggar Hyper-V Worker Process en händelse på virtualiseringsvärden som varnar värdadministratören om att den virtuella datorns konfiguration inte är optimal och rekommenderar att SMT aktiveras för den virtuella datorn.
Så här identifierar du icke-optimalt konfigurerade virtuella datorer
Du kan identifiera icke-SMT virtuella datorer genom att granska systemloggen i händelseloggaren för Hyper-V Worker Process-händelse-ID 3498, som genereras för en virtuell maskin när antalet virtuella processorer i maskinen är större än antalet fysiska kärnor. Arbetsprocesshändelser kan hämtas från Loggboken eller via PowerShell.
Fråga efter Hyper-V VM-händelse i arbetsprocessen med PowerShell
Om du vill fråga efter Hyper-V arbetsprocesshändelse-ID 3498 med PowerShell anger du följande kommandon från en PowerShell-prompt.
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Worker"; ID=3498}
Påverkan av SMT-gästkonfiguaration på användningen av hypervisor-upplysningar för gästoperativsystem
Microsoft-hypervisor-programmet erbjuder flera upplysningar, eller tips, som operativsystemet som körs på en virtuell gästdator kan köra frågor mot och använda för att utlösa optimeringar, till exempel sådana som kan gynna prestanda eller på annat sätt förbättra hanteringen av olika villkor när virtualisering körs. En nyligen introducerad insikt rör hantering av schemaläggning av virtuella processorer och användningen av operativsystemåtgärder för sidokanalattacker som utnyttjar SMT.
Note
Microsoft rekommenderar att värdadministratörer aktiverar SMT för virtuella gästdatorer för att optimera arbetsbelastningsprestanda.
Informationen om den här gästupplysningen finns nedan, men det viktigaste för virtualiseringsvärdadministratörer är att virtuella datorer ska ha HwThreadCountPerCore konfigurerat för att matcha värdens fysiska SMT-konfiguration. På så sätt kan hypervisor-programmet rapportera att det inte finns någon icke-arkitektonisk kärndelning. Därför kan alla gästoperativsystem som stöder optimeringar som kräver upplysning aktiveras. På Windows Server 2019 skapar du nya virtuella datorer och lämnar standardvärdet HwThreadCountPerCore (0). Äldre virtuella datorer som migrerats från Windows Server 2016-värdar kan uppdateras till Windows Server 2019-konfigurationsversionen. När du har gjort det rekommenderar Microsoft att du ställer in HwThreadCountPerCore = 0. På Windows Server 2016 rekommenderar Microsoft att du ställer in HwThreadCountPerCore så att det matchar värdkonfigurationen (vanligtvis 2).
Detaljer om upplysning rörande NoNonArchitecturalCoreSharing
Från och med Windows Server 2016 definierar hypervisor-programmet en ny upplysning för att beskriva dess hantering av VP-schemaläggning och placering till gästoperativsystemet. Den här upplysningen definieras i hypervisor-funktionsspecifikationen på den översta nivån v5.0c.
Hypervisorns syntetiska CPUID-blad CPUID.0x40000004.EAX:18[NoNonArchitecturalCoreSharing = 1] anger att en virtuell processor aldrig kommer att dela en fysisk kärna med en annan virtuell processor, förutom för virtuella processorer som rapporteras som systerkärnor i SMT-trådar. Till exempel kommer en gäst-VP aldrig att köras på en SMT-tråd tillsammans med en rot-VP som körs samtidigt på en annan SMT-tråd på samma processorkärna. Det här villkoret är bara möjligt när du kör virtualiserat och representerar därför ett icke-arkitektoniskt SMT-beteende som också har allvarliga säkerhetskonsekvenser. Gästoperativsystemet kan använda NoNonArchitecturalCoreSharing = 1 som en indikation på att det är säkert att aktivera optimeringar, vilket kan hjälpa det att undvika prestandakostnaderna för att ställa in STIBP.
I vissa konfigurationer anger hypervisor-programmet inte att NoNonArchitecturalCoreSharing = 1. Om en värd till exempel har SMT aktiverat och är konfigurerad för att använda den klassiska hypervisor-schemaläggaren blir NoNonArchitecturalCoreSharing 0. Detta kan förhindra att upplysta gäster aktiverar vissa optimeringar. Därför rekommenderar Microsoft att värdadministratörer som använder SMT förlitar sig på hypervisor core-schemaläggaren och ser till att virtuella datorer är konfigurerade för att ärva sin SMT-konfiguration från värden för att säkerställa optimala arbetsbelastningsprestanda.
Summary
Säkerhetshotlandskapet fortsätter att utvecklas. För att säkerställa att våra kunder är säkra som standard ändrar Microsoft standardkonfigurationen för hypervisor-programmet och virtuella datorer med start i Windows Server 2019 Hyper-V och ger uppdaterad vägledning och rekommendationer för kunder som kör Windows Server 2016 Hyper-V. Administratörer av virtualiseringsvärdar bör:
Läsa och förstå vägledningen i det här dokumentet
Utvärdera och justera deras virtualiseringsdistributioner noggrant för att säkerställa att de uppfyller målen för säkerhet, prestanda, virtualiseringsdensitet och arbetsbelastningsresponsivitet för sina unika krav
Överväg att konfigurera om befintliga Windows Server 2016-Hyper-V värdar för att utnyttja de starka säkerhetsfördelar som erbjuds av hypervisor core scheduler
Uppdatera befintliga virtuella datorer som inte är SMT-datorer för att minska prestandapåverkan från schemaläggningsbegränsningar som införts av VP-isolering som åtgärdar säkerhetsrisker för maskinvara