Condividi tramite


Gestire Hyper-V tipi di utilità di pianificazione dell'hypervisor

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.

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:

  1. Aprire una finestra di PowerShell usando un account membro del gruppo Hyper-V Administrators o equivalente.

  2. 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 di 0 per <n>, il valore HwThreadCountPerCore viene impostato al conteggio dei thread SMT per core dell'host.

    Note

    Windows Server 2016 non supporta l'impostazione HwThreadCountPerCore su 0.

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.

Screenshot della finestra Informazioni di sistema. La riga Processore è selezionata. Elenca le informazioni su un core e due processori.

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:

  1. Aprire il prompt dei comandi con privilegi di amministratore.

  2. 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.

Screenshot della finestra delle proprietà del Visore eventi per un evento Hyper-V-Hypervisor con ID 2. Il testo nella scheda Generale indica un tipo di scheduler di 0x2.

Screenshot degli eventi nel Visualizzatore eventi. È selezionato un evento di avvio Hyper-V-Hypervisor con ID 2. Un riquadro inferiore mostra i dettagli dell'evento.

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

Screenshot di una finestra di PowerShell. Un comando interroga l'evento di lancio dell'hypervisor più recente con ID 2. L'output mostra il tipo di pianificatore come 0x2.