Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive le modalità della logica di pianificazione del processore virtuale in Windows Server e Windows. Queste modalità, o tipi di scheduler, determinano come l'hypervisor Hyper-V alloca e gestisce il lavoro tra i processori virtuali guest. Un amministratore host Hyper-V può:
- Selezionare i tipi di scheduler hypervisor più adatti per le macchine virtuali guest.
- Configurare le macchine virtuali per sfruttare la logica di pianificazione.
Background
Prima di considerare la logica e i controlli alla base della pianificazione del processore virtuale Hyper-V, è importante comprendere alcuni concetti come il multithreading simultaneo (SMT) e come Hyper-V virtualizzi i processori.
Understand SMT
SMT è una tecnica nella progettazione moderna del processore che consente a thread di esecuzione separati e indipendenti di condividere le risorse del processore. SMT offre in genere un aumento modesto delle prestazioni per i carichi di lavoro. Parallelizza i calcoli quando possibile, aumentando la velocità effettiva delle istruzioni. Tuttavia, quando i thread competono tra loro per le risorse del processore condiviso, a volte non c'è un miglioramento notevole delle prestazioni. Potrebbe anche verificarsi un lieve calo delle prestazioni.
Per usare SMT con Windows Server, è necessario disporre di un processore compatibile. I processori con Intel Hyper-Threading Technology (Intel HT Technology) o SMT Advanced Micro Devices (AMD) sono esempi di processori compatibili.
Ai fini di questo articolo, le descrizioni di SMT e il modo in cui vengono usate da Hyper-V si applicano allo stesso modo ai sistemi Intel e AMD.
- Per ulteriori informazioni sulla tecnologia Intel HT, consultare Intel Hyper-Threading Technology.
- Per altre informazioni su AMD SMT, vedere Architettura core AMD "Zen".
Comprendere come Hyper-V virtualizza i processori
Prima di prendere in considerazione i tipi di scheduler dell'hypervisor, è necessario comprendere l'architettura Hyper-V. Per un riepilogo dettagliato del funzionamento di questa architettura, vedere panoramica della tecnologiaHyper-V. Per il momento, tenere presenti i concetti seguenti:
Hyper-V crea e gestisce le partizioni di macchine virtuali, l'allocazione e la condivisione delle risorse di calcolo tra di esse, sotto il controllo dell'hypervisor. Le partizioni forniscono limiti di isolamento sicuri tra tutte le macchine virtuali guest e tra le macchine virtuali guest e la partizione radice.
La partizione radice è una partizione di macchina virtuale, anche se dispone di proprietà univoce e privilegi maggiori rispetto alle macchine virtuali guest. Partizione radice:
- Fornisce servizi di gestione che controllano tutte le macchine virtuali guest.
- Fornisce supporto per dispositivi virtuali per gli ospiti.
- Gestisce tutti gli input e l'output del dispositivo per le macchine virtuali guest.
È consigliabile non eseguire carichi di lavoro dell'applicazione nella partizione radice.
Esiste una corrispondenza uno-a-uno tra i processori virtuali della partizione radice e i processori logici sottostanti. Un processore virtuale host viene sempre eseguito sullo stesso processore logico sottostante. Non esiste alcuna migrazione dei processori virtuali di partizione radice.
Per impostazione predefinita, i processori logici che ospitano i processori virtuali di partizione radice possono anche eseguire processori virtuali guest.
L'hypervisor può pianificare l'esecuzione di un processore virtuale guest in qualsiasi processore logico disponibile. L'utilità di pianificazione dell'hypervisor tenta di considerare la località temporale della cache, la topologia NUMA (Accesso Non Uniforme alla Memoria) e molti altri fattori quando pianifica un processore virtuale ospite. In definitiva, il processore virtuale può essere pianificato in qualsiasi processore logico host.
Tipi di pianificatori hypervisor
L'hypervisor Hyper-V supporta diverse modalità di logica del pianificatore, che determinano come l'hypervisor pianifica i processori virtuali sui processori logici sottostanti. Questi tipi di schedulatori sono:
Il pianificatore classico
L'utilità di pianificazione classica è l'utilità di pianificazione predefinita usata in tutte le versioni di Hyper-V precedenti a Windows Server 2019. Il pianificatore classico offre un modello di pianificazione a equa ripartizione, preemptive e round robin per i processori virtuali guest.
Il tipo di pianificatore classico è appropriato per la maggior parte degli utilizzi tradizionali di Hyper-V, ad esempio cloud privati, provider di hosting e altro. Le caratteristiche delle prestazioni del tipo di utilità di pianificazione classica sono ottimizzate per supportare un'ampia gamma di scenari di virtualizzazione, ad esempio:
- Allocazione eccessiva dei processori virtuali ai processori logici.
- Esecuzione di più macchine virtuali e carichi di lavoro eterogenei contemporaneamente.
- Esecuzione di macchine virtuali con prestazioni elevate su larga scala.
- Supporto del set completo di funzionalità di Hyper-V senza restrizioni e altri scenari.
Utilità di pianificazione di base
L'utilità di pianificazione principale dell'hypervisor è un'alternativa alla logica classica dell'utilità di pianificazione. L'utilità di pianificazione principale è disponibile a partire da Windows Server 2016 e Windows 10 versione 1607. Il pianificatore centrale offre una solida protezione di sicurezza per l'isolamento del carico di lavoro guest. Riduce inoltre la variabilità delle prestazioni per i carichi di lavoro all'interno di macchine virtuali eseguite in un host di virtualizzazione abilitato per SMT. L'utilità di pianificazione principale supporta l'esecuzione contemporaneamente di macchine virtuali SMT e non SMT nello stesso host di virtualizzazione abilitato per SMT.
Pianificatore principale
- Usa la topologia SMT dell'host di virtualizzazione.
- Facoltativamente, espone le coppie SMT alle macchine virtuali guest.
- Pianifica gruppi di processori virtuali guest dalla stessa macchina virtuale ai gruppi di processori logici SMT.
Questo lavoro avviene simmetricamente. Se i processori logici si trovano in gruppi di due, i processori virtuali vengono pianificati in gruppi di due e un core non viene mai condiviso tra le macchine virtuali. Quando si pianifica un processore virtuale per una macchina virtuale senza SMT abilitato, tale processore virtuale utilizza l'intero core quando viene eseguito. Quando si usa l'utilità di pianificazione principale:
- Crea un forte limite di sicurezza per l'isolamento del carico di lavoro ospite. I processori virtuali guest possono essere eseguiti solo su coppie di core fisici sottostanti, riducendo la vulnerabilità agli attacchi di ascolto via canale laterale.
- Riduce la variabilità nella velocità effettiva.
- Può potenzialmente ridurre le prestazioni. Se solo un processore virtuale in un gruppo può essere eseguito, solo uno dei flussi di istruzioni nel nucleo viene avviato. L'altra rimane inattiva.
- Il sistema operativo e le applicazioni in esecuzione nella macchina virtuale guest possono usare il comportamento SMT e le API (Programming Interface) per controllare e distribuire il lavoro tra thread SMT, proprio come fanno con un computer fisico.
A partire da Windows Server 2019, Hyper-V usa l'utilità di pianificazione principale per impostazione predefinita. Nelle versioni precedenti, ad esempio Windows Server 2016, l'utilità di pianificazione principale è facoltativa e l'utilità di pianificazione classica è quella predefinita.
Comportamento del pianificatore principale con SMT dell'host disabilitato
In alcuni casi, è possibile configurare l'hypervisor per l'uso del tipo di utilità di pianificazione principale, ma la funzionalità SMT è disabilitata o non è presente nell'host di virtualizzazione. In questi casi, Hyper-V utilizza il comportamento classico del gestore di pianificazione, indipendentemente dall'impostazione del tipo di gestore di pianificazione dell'hypervisor.
Pianificatore principale
L'utilità di pianificazione radice è arrivata con Windows 10, versione 1803. Quando si abilita il tipo di schedulatore root, l'hypervisor concede il controllo alla partizione radice per la pianificazione delle attività di lavoro. Nell'istanza del sistema operativo della partizione radice, l'utilità di pianificazione NT gestisce tutti gli aspetti dell'assegnazione del lavoro ai processori logici di sistema.
Il pianificatore radice è progettato per soddisfare requisiti specifici e supportare una partizione di servizio, fornendo un isolamento sicuro del carico di lavoro, utilizzato con Windows Defender Application Guard (WDAG). In questo scenario, lasciando le responsabilità di pianificazione per il sistema operativo radice offre diversi vantaggi:
- È possibile usare i controlli delle risorse della CPU applicabili agli scenari di contenitori utilizzando la partizione dell'utilità, semplificando la gestione e la distribuzione.
- Lo scheduler del sistema operativo principale può raccogliere facilmente le metriche relative all'uso della CPU del carico di lavoro all'interno del contenitore. Può usare questi dati come input per i criteri di pianificazione e applicarli a tutti gli altri carichi di lavoro nel sistema.
- Queste stesse metriche aiutano anche ad attribuire il lavoro svolto in un contenitore di applicazioni al sistema host. Tenere traccia di queste metriche è più difficile con i carichi di lavoro delle macchine virtuali tradizionali, in cui alcune operazioni per conto di tutte le macchine virtuali in esecuzione vengono eseguite nella partizione radice.
Uso del programma di pianificazione principale nei sistemi client
A partire da Windows 10, versione 1803, il pianificatore radice viene utilizzato per impostazione predefinita solo nei sistemi client, che implica:
- È possibile abilitare l'hypervisor per supportare la sicurezza basata su virtualizzazione e l'isolamento del carico di lavoro WDAG.
- È importante gestire correttamente i sistemi futuri con architetture di base eterogenee.
Questa configurazione è l'unica configurazione dell'utilità di pianificazione hypervisor supportata per i sistemi client. Gli amministratori non devono tentare di modificare il tipo di schedulatore hypervisor predefinito nei sistemi client Windows.
Controlli delle risorse DELLA CPU della macchina virtuale e utilità di pianificazione radice
I controlli delle risorse che l'hypervisor Hyper-V utilizza sui processori delle singole macchine virtuali non sono supportati quando si abilita il pianificatore radice dell'hypervisor. Nel sistema operativo radice, la logica dell'utilità di pianificazione gestisce le risorse host su base globale e non gestisce le risorse guest di singole macchine virtuali. I controlli delle risorse del processore Hyper-V per macchina virtuale, come limiti, pesi e riserve, valgono solo quando l'hypervisor controlla direttamente la pianificazione del processore virtuale, ad esempio con i tipi di scheduler classici e principali.
Uso del root scheduler nei sistemi server
Non è consigliabile usare l'utilità di pianificazione radice con Hyper-V sui server. Le caratteristiche delle prestazioni non sono ancora completamente caratterizzate e ottimizzate per supportare l'ampia gamma di carichi di lavoro tipici di molte distribuzioni di virtualizzazione server.
Abilitare SMT nelle macchine virtuali ospiti
Dopo aver configurato l'hypervisor dell'host di virtualizzazione per utilizzare il tipo di pianificazione del core, è anche possibile configurare le macchine virtuali guest per utilizzare SMT. In particolare, è possibile specificare il numero di thread SMT virtuali da esporre a una macchina virtuale guest. Il pianificatore del sistema operativo guest e i carichi di lavoro delle macchine virtuali possono quindi rilevare e utilizzare la topologia SMT nella propria pianificazione del lavoro.
- In Windows Server 2016, la funzionalità SMT guest non è configurata per impostazione predefinita. Un amministratore host Hyper-V deve abilitarlo in modo esplicito.
- In Windows Server 2019 e versioni successive, le nuove macchine virtuali create nell'host ereditano la topologia SMT host per impostazione predefinita. Ad esempio, una macchina virtuale versione 9.0 creata in un host con due thread SMT per core ha anche due thread SMT per core.
È necessario usare PowerShell per abilitare SMT in una macchina virtuale guest. Non è disponibile alcuna interfaccia utente in Hyper-V Manager. Per abilitare SMT in una macchina virtuale guest:
Aprire una finestra di PowerShell usando un account membro del gruppo Hyper-V Administrators o equivalente.
Eseguire
Set-VMProcessor -VMName <VM-name> -HwThreadCountPerCore <n>
, dove<n>
è il numero di thread SMT per core visualizzati dalla macchina virtuale guest. Se si usa un valore di0
per<n>
, il valoreHwThreadCountPerCore
viene impostato al conteggio dei thread SMT per core dell'host.Note
Windows Server 2016 non supporta l'impostazione
HwThreadCountPerCore
su0
.
Lo screenshot seguente mostra le informazioni di sistema ottenute dal sistema operativo guest in esecuzione in una macchina virtuale. Sono disponibili due processori virtuali e SMT è abilitato. Il sistema operativo guest rileva due processori logici appartenenti allo stesso core.
Configurare il tipo di scheduler dell'hypervisor
Il tipo di utilità di pianificazione dell'hypervisor che Hyper-V usa per impostazione predefinita dipende dalla versione del sistema operativo. Indipendentemente dall'utilità di pianificazione predefinita nel sistema operativo, è possibile configurare l'hypervisor per l'uso dell'utilità di pianificazione principale. Il core scheduler aumenta la sicurezza limitando l'esecuzione dei processori virtuali guest su coppie SMT fisiche corrispondenti. Questa configurazione supporta l'uso di macchine virtuali con la pianificazione SMT per i processori virtuali guest.
Note
In Windows Server 2016 Hyper-V usa l'utilità di pianificazione classica per impostazione predefinita. Se si usa Hyper-V in Windows Server 2016 o versione successiva, è consigliabile selezionare l'utilità di pianificazione principale. Questa opzione garantisce che gli host di virtualizzazione siano protetti in modo ottimale da macchine virtuali guest potenzialmente dannose.
Valutare l'impatto sulla sicurezza e sulle prestazioni
Per garantire che gli host Hyper-V vengano distribuiti in una configurazione di sicurezza ottimale, Hyper-V utilizza il modello di pianificazione centrale dell'hypervisor come impostazione predefinita da Windows Server 2019. L'amministratore host potrebbe opzionalmente configurare l'host per utilizzare il pianificatore classico legacy. Prima di eseguire l'override delle impostazioni predefinite, gli amministratori devono leggere, comprendere e prendere in considerazione l'impatto di ogni tipo di utilità di pianificazione sulla sicurezza e sulle prestazioni degli host di virtualizzazione. Per altre informazioni, vedere Informazioni sulla selezione del tipo di schedulatore dell'hypervisor Hyper-V.
Selezionare il tipo di scheduler dell'hypervisor in Windows Server
La configurazione del gestore dell'hypervisor è controllata dalla voce dei dati configurativi di avvio (hypervisorschedulertype
BCD).
Per selezionare un tipo di pianificatore:
Aprire il prompt dei comandi con privilegi di amministratore.
Immettere
bcdedit /set hypervisorschedulertype <type>
, dove<type>
è una delle opzioni seguenti:Classic
Core
Root
Per rendere effettive le modifiche apportate al tipo di scheduler dell'hypervisor, è necessario riavviare il sistema.
Note
L'utilità di pianificazione radice dell'hypervisor non è supportata su Hyper-V su Windows Server al momento. Hyper-V gli amministratori non devono tentare di configurare il scheduler radice per scenari di virtualizzazione del server.
Determinare il tipo di pianificatore corrente
È possibile determinare il tipo di utilità di pianificazione dell'hypervisor che Hyper-V sta attualmente utilizzando esaminando il log di sistema di Windows. Cerca l'evento di avvio dell'hypervisor più recente con un ID pari a 2. Tale evento riporta il tipo di scheduler dell'hypervisor configurato all'avvio dell'hypervisor. I valori seguenti sono possibili per il tipo di schedulatore dell'hypervisor:
Value | Scheduler type |
---|---|
1 | Pianificatore classico, SMT disabilitata |
2 | Classic scheduler |
3 | Core scheduler |
4 | Root scheduler |
È possibile usare Visualizzatore eventi o PowerShell per visualizzare i registri eventi di avvio dell'hypervisor.
Usare PowerShell per eseguire query sui log di sistema per un evento di avvio dell'hypervisor
Per eseguire una query sui log di sistema per un evento hypervisor con ID 2 usando PowerShell, eseguire il comando seguente:
Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1