Condividi tramite


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

Questo articolo descrive le nuove modalità della logica di pianificazione del processore virtuale introdotta in Windows Server 2016. Tali modalità, o tipi di utilità di pianificazione, determinano il modo in cui l'hypervisor Hyper-V alloca e gestisce il lavoro tra processori virtuali guest. Un amministratore host Hyper-V può:

  • Selezionare i tipi di utilità di pianificazione hypervisor più adatti per le macchine virtuali (VM) guest.
  • Configurare le VM per sfruttarne la logica di pianificazione.

Prerequisiti

Per utilizzare le funzionalità dell'utilità di pianificazione dell'hypervisor descritte più avanti in questo articolo, è necessario installare gli aggiornamenti seguenti. Questi aggiornamenti includono modifiche per supportare la nuova hypervisorschedulertype opzione BCD, necessaria per la configurazione dell'host.

Versione Rilascio Aggiornamento necessario Articolo Knowledge Base
Windows Server 2016 1607 2018.07 C KB4338822
Windows Server 2016 1703 2018.07 C KB4338827
Windows Server 2016 1709 2018.07 C KB4338817
Windows Server 2019 1804 Nessuno Nessuno

Background

Prima di discutere della logica e dei controlli alla base della pianificazione del processore virtuale Hyper-V, è importante comprendere alcuni concetti come il multithreading simultaneo e il modo in cui Hyper-V virtualizza i processori.

Informazioni su SMT

Il multithreading simultaneo (SMT) è una tecnica applicata nelle moderne progettazioni dei processori, che consente a thread di esecuzione separati e indipendenti di condividere le risorse del processore. In genere, SMT offre un modesto incremento delle prestazioni per la maggior parte dei carichi di lavoro. Parallelizza i calcoli quando possibile, aumentando la velocità effettiva delle istruzioni. Tuttavia, ci sono anche situazioni in cui non si assiste a un miglioramento significativo delle prestazioni ma addirittura a un leggero peggioramento, quando i thread competono tra loro per le risorse del processore condiviso.

Per usare SMT con Windows Server, è necessario disporre di un processore compatibile. Ad esempio, un processore con tecnologia Intel Hyper-Threading o Multithreading (SMT) per micro dispositivi avanzati (Advanced Micro Devices, AMD).

Ai fini di questo articolo, le descrizioni di SMT e le modalità con le quali viene usato da Hyper-V si applicano parimenti ai sistemi Intel e AMD.

Informazioni sulle modalità di virtualizzazione dei processori da parte di Hyper-V

Prima di prendere in considerazione i tipi di utilità di pianificazione dell'hypervisor, è necessario comprendere l'architettura di Hyper-V. È possibile trovare un riepilogo più dettagliato del funzionamento di questa architettura nella panoramica di Hyper-V, ma per il momento è consigliabile tenere presenti i concetti seguenti:

  • Hyper-V crea e gestisce le partizioni di VM, 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 è essa stessa una partizione di macchina virtuale, anche se dispone di proprietà univoche e privilegi maggiori rispetto alle macchine virtuali guest. La partizione radice:

    • Fornisce servizi di gestione che controllano tutte le macchine virtuali guest.
    • Fornisce supporto per dispositivi virtuali per gli utenti guest.
    • 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.

  • Ogni processore virtuale (VP) della partizione radice è mappato uno-a-uno a un processore logico (LP) sottostante. Un VP host viene sempre eseguito sullo stesso LP sottostante. Non esiste alcuna migrazione dei VP della partizione radice.

  • Per impostazione predefinita, gli LP che ospitano i VP della partizione radice eseguiti possono eseguire anche VP guest.

  • Hypervisor potrebbe pianificare l'esecuzione del VP guest in qualsiasi processore logico disponibile. Mentre l'utilità di pianificazione dell'hypervisor tenta di prendere in considerazione la località della cache temporale, la topologia NUMA (Non-Uniform Memory Access) e molti altri fattori nel corso della pianificazione di un VP guest, fondamentalmente il VP può essere pianificato in qualsiasi LP host.

Tipi di utilità di pianificazione dell'hypervisor

In Windows Server 2016, l'hypervisor Hyper-V supporta diverse modalità di logica dell'utilità di pianificazione, che determinano il modo in cui l'hypervisor pianifica i processori virtuali nei processori logici sottostanti. Questi tipi di utilità di pianificazione sono:

Utilità di pianificazione classica

L'utilità di pianificazione classica è stata l'impostazione predefinita per tutte le versioni dell'hypervisor Hyper-V di Windows fin dall'inizio, incluso Windows Server 2016 Hyper-V. L'utilità di pianificazione classica offre una condivisione equa, un modello di pianificazione preemptive e round robin per i processori virtuali guest.

Il tipo di utilità di pianificazione classico è il più appropriato per gli usi più tradizionali di Hyper-V, ad esempio cloud privati, provider di hosting e così via. Le caratteristiche delle prestazioni del tipo di utilità di pianificazione classica sono ottimizzate per supportare un'ampia gamma di scenari di virtualizzazione, quali:

  • Sovrascrivere i processori virtuali ai processori logici.
  • Eseguire più macchine virtuali e carichi di lavoro eterogenei contemporaneamente.
  • Eseguire macchine virtuali con prestazioni elevate su larga scala.
  • Supportare il set completo di funzionalità di Hyper-V senza restrizioni e altri scenari.

Utilità di pianificazione principale

L'utilità di pianificazione principale dell'hypervisor è un'alternativa alla logica classica dell'utilità di pianificazione introdotta in Windows Server 2016 e Windows 10, versione 1607. L'utilità di pianificazione principale offre un limite di sicurezza robusto ai fini dell'isolamento del carico di lavoro guest. Riduce inoltre la variabilità delle prestazioni per i carichi di lavoro all'interno delle macchine virtuali in esecuzione in un host di virtualizzazione abilitato per SMT. L'utilità di pianificazione principale supporta l'esecuzione contemporanea di macchine virtuali SMT e non SMT nello stesso host di virtualizzazione abilitato per SMT.

Utilità di pianificazione 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 gli LP sono in gruppi di due, i VP vengono pianificati in gruppi di due e un core non viene mai condiviso tra le macchine virtuali. Quando si pianifica il VP per una macchina virtuale senza SMT abilitato, tale VP usa l'intero core durante l'esecuzione. Il risultato complessivo dell'utilità di pianificazione principale è che:

  • Crea un limite di sicurezza robusto per l'isolamento del carico di lavoro guest. I VP guest possono essere eseguiti solo sulle coppie dei core fisici sottostanti, riducendo la vulnerabilità agli attacchi di snooping sul canale laterale.
  • Riduce la variabilità nella velocità effettiva.
  • Può potenzialmente ridurre le prestazioni. Se all’interno di un gruppo può essere eseguito un solo VP, solo una delle istruzioni si trasmette nei lanci principali mentre 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 avviene 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 era facoltativa e l'opzione predefinita era l'utilità di pianificazione classica.

Comportamento dell'utilità di pianificazione principale con SMT host disabilitato

In alcuni casi, è possibile configurare l'hypervisor perché utilizzi il tipo di utilità di pianificazione principale, ma la funzionalità SMT è disabilitata oppure non è presente nell'host di virtualizzazione. In questi casi, Hyper-V usa il comportamento dell'utilità di pianificazione classica indipendentemente dall'impostazione del tipo di utilità di pianificazione dell'hypervisor.

Utilità di pianificazione radice

L'utilità di pianificazione radice è stata introdotta con Windows 10, versione 1803. Quando si abilita il tipo di utilità di pianificazione radice, l'hypervisor fornisce il controllo della partizione radice della pianificazione del lavoro. L'utilità di pianificazione NT nell'istanza del sistema operativo della partizione radice gestisce tutti gli aspetti della pianificazione del lavoro nei LP di sistema.

L'utilità di pianificazione radice soddisfa i requisiti univoci per supportare una partizione di utilità e fornire un isolamento sicuro del carico di lavoro, come con Windows Defender Application Guard (WDAG). In questo scenario, lasciare le responsabilità della pianificazione al sistema operativo radice offre diversi vantaggi:

  • È possibile usare i controlli delle risorse della CPU applicabili agli scenari di contenitori con la partizione dell'utilità, semplificando la gestione e la distribuzione.
  • L'utilità di pianificazione del sistema operativo radice può raccogliere facilmente le metriche relative all'uso della CPU del carico di lavoro all'interno del contenitore. Può utilizzare questi dati come input per gli stessi criteri di pianificazione applicabili a tutti gli altri carichi di lavoro nel sistema.
  • Inoltre, queste stesse metriche consentono di eseguire il lavoro degli attributi in un contenitore di applicazioni nel 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 dell'utilità di pianificazione radice nei sistemi client

A partire da Windows 10, versione 1803, l'utilità di pianificazione radice viene usata per impostazione predefinita solo nei sistemi client, il che significa che:

  • È 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 eseguire l'override del tipo di utilità di pianificazione dell’hypervisor predefinito nei sistemi client Windows.

Controlli delle risorse CPU della macchina virtuale e utilità di pianificazione radice

I controlli delle risorse del processore di macchine virtuali forniti da Hyper-V non sono supportati quando si abilita l'utilità di pianificazione radice dell'hypervisor. La logica dell'utilità di pianificazione del sistema operativo radice gestisce le risorse host su base globale e non gestisce le risorse guest di una singola macchina virtuale. I controlli delle risorse del processore Hyper-V per macchina virtuale, ad esempio limiti, pesi e riserve, possono essere applicati solo quando l'hypervisor controlla direttamente la pianificazione dei VP, ad esempio con i tipi di utilità di pianificazione classici e principali.

Uso dell'utilità di pianificazione radice nei sistemi server

Non è consigliabile usare l'utilità di pianificazione radice con Hyper-V nei server. Le sue caratteristiche prestazionali non sono ancora state 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 guest

Dopo aver configurato l'hypervisor dell'host di virtualizzazione per l'impiego del tipo di utilità di pianificazione principale, è inoltre possibile configurare le macchine virtuali guest per l'uso di SMT. Stante il fatto che i VP vengono connessi a una macchina virtuale guest, ciò fa sì che l'utilità di pianificazione nel sistema operativo guest e i carichi di lavoro in esecuzione nella macchina virtuale rilevino e utilizzino la topologia SMT nella pianificazione del lavoro.

  • In Windows Server 2016, la funzionalità SMT guest non è configurata per impostazione predefinita. Un amministratore host Hyper-V deve abilitarla in modo esplicito.
  • A partire da Windows Server 2019, 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 avrà anche due thread SMT per core.

Per abilitare SMT in una macchina virtuale guest è necessario usare PowerShell. Nella console di gestione di Hyper-V non è disponibile alcuna interfaccia utente. Per abilitare SMT in una macchina virtuale guest:

  1. Aprire una finestra di PowerShell usando un account membro del gruppo di amministratori di Hyper-V, o equivalente.
  2. Eseguire Set-VMProcessor -VMName <VMName> -HwThreadCountPerCore <n>, dove <n> è il numero di thread SMT per core visualizzati dalla macchina virtuale guest. <n> = 0 imposta il valore HwThreadCountPerCore in modo che corrisponda al numero di thread SMT dell'host per ogni valore core.

Nota

In Windows Server 2019 e versioni successive è possibile impostare HwThreadCountPerCore = 0 anziché cercare la corresponsione al numero di thread SMT host.

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 abilitati. Il sistema operativo guest rileva due processori logici appartenenti allo stesso core.

Screenshot che mostra msinfo32 in una macchina virtuale guest con SMT abilitato.

Configurare il tipo di utilità di pianificazione hypervisor in Windows Server 2016 Hyper-V

Windows Server 2016 Hyper-V usa il modello di utilità di pianificazione hypervisor classico per impostazione predefinita. Facoltativamente, è possibile configurare l'hypervisor per l'uso dell'utilità di pianificazione principale. L'utilità di pianificazione principale aumenta la sicurezza, limitando l'esecuzione di VP guest nelle coppie SMT fisiche corrispondenti. Questa configurazione supporta l'uso di macchine virtuali con la pianificazione SMT per i propri VP guest.

Nota

È consigliabile che tutti i clienti che eseguono Windows Server 2016 Hyper-V selezionino l'utilità di pianificazione principale per far sì che gli host di virtualizzazione siano protetti in modo ottimale da macchine virtuali guest potenzialmente dannose.

Windows Server 2019 Hyper-V usa per impostazione predefinita l'utilità di pianificazione principale

Per garantire che gli host Hyper-V vengano distribuiti nella configurazione di sicurezza ottimale, Windows Server 2019 Hyper-V usa ora il modello di pianificazione dell'hypervisor principale come impostazione predefinita. L'amministratore host potrebbe facoltativamente configurare l'host per l'uso dell'utilità di pianificazione classica legacy. Prima di eseguire l'override delle impostazioni predefinite, gli amministratori devono leggere, comprendere e prendere in considerazione gli effetti 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 utilità di pianificazione dell’hypervisor Hyper-V.

Selezionare il tipo di utilità di pianificazione dell'hypervisor in Windows Server

La configurazione dell'utilità di pianificazione dell'hypervisor è controllata dalla voce BCD hypervisorschedulertype.

Per selezionare un tipo di utilità di pianificazione:

  1. Aprire un 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 utilità di pianificazione dell'hypervisor, è necessario riavviare il sistema.

Nota

L'utilità di pianificazione radice dell'hypervisor non è attualmente supportata in Windows Server Hyper-V. Gli amministratori di Hyper-V non devono tentare di configurare l'utilità di pianificazione radice come utilità da usare negli scenari di virtualizzazione del server.

Determinare il tipo di utilità di pianificazione corrente

È possibile determinare il tipo di utilità di pianificazione hypervisor attualmente usato da Hyper-V esaminando il registro di sistema del Visualizzatore eventi. È possibile visualizzare l'ID 2 evento di avvio dell'hypervisor più recente, che segnala il tipo di utilità di pianificazione dell'hypervisor configurato all'avvio dell'hypervisor. È possibile ottenere gli eventi di avvio dell'hypervisor dal Visualizzatore eventi di Windows o in PowerShell.

L'evento di avvio dell'hypervisor ID 2 indica il tipo di utilità di pianificazione dell'hypervisor, dove:

  • 1 = Utilità di pianificazione classica, SMT disabilitato
  • 2 = Utilità di pianificazione classica
  • 3 = Utilità di pianificazione principale
  • 4 = Utilità di pianificazione radice

Screenshot della finestra delle proprietà dell'ID evento di avvio dell'hypervisor 2. L'utente ha selezionato la scheda Generale, che mostra che il tipo di utilità di pianificazione dell'hypervisor è 0x2.

Screenshot della finestra Visualizzatore eventi. L'utente ha selezionato l'ID evento di avvio hypervisor Hyper-V 2 dall'elenco degli eventi, evidenziandolo in blu scuro.

Eseguire una query sull'evento di avvio del tipo di utilità di pianificazione hypervisor Hyper-V usando PowerShell

Per eseguire una query per l’evento hypervisor ID 2 usando PowerShell, eseguire i comandi seguenti da un prompt di PowerShell:

Get-WinEvent -FilterHashTable @{ProviderName="Microsoft-Windows-Hyper-V-Hypervisor"; ID=2} -MaxEvents 1

Screenshot di una query per l'ID evento di avvio dell'hypervisor 2. I risultati dicono che il tipo di utilità di pianificazione dell'hypervisor è 0x2.