Hyper-V Series: Gestione delle CPU

Nuovo appuntamento con Hyper-V Series, gli articoli che spiegano come funziona Hyper-V e come configurarlo in modo corretto. Il secondo capitolo è dedicato ancora ai processori e nello specifico vedremo il Ratio.

CPU Ratio

Il Processor Ratio è il rapporto tra CPU fisiche (pCPU) e CPU virtuali (vCPU) ed è una componente molto importante quando si va a configurare una macchina virtuale, che può impattare l’intero host di virtualizzazione, in caso di sovradimensionamento.

Ogni processore ha al suo interno un certo numero di Core, che variano a seconda della categoria, della potenza ma soprattutto dal prezzo: si spazia dagli attuali 4, per le CPU consumer, fino agli attuali 24 dei processori Xeon famiglia E7.

Questo è il metro da tenere in considerazione quando si costruisce un’infrastruttura virtuale: se compriamo una macchina con 2 pCPU, da 12 core/CPU, avremmo a disposizione in totale 24 core per le nostre virtual machine. Posso tenere in considerazione l’Hyper-Threating? La risposta è no! La funzione può portare dei benefici minori, benchè Microsoft consigli di disattivarla, ma questo non significa che si possa considerare in fase di progettazione dell’architettura virtuale.

Rapporto tra VM e Host

Il Ratio delle varie macchine virtuali è dato prettamente da quale applicativo dovrà girarci sopra ed è legato dal numero di vCPU che andremo ad assegnare alla nostra VM. Un File Server molto utilizzato dovrebbe avere minimo 2 vCPU, un SQL Server potrebbe aver bisogno di almeno 4 vCPU ma, di contro, un SQL Server Express non utilizza più di una singola vCPU. Quindi sapere esattamente cosa dovremmo installare all’interno delle macchine virtuali, aiuta a trovare la configurazione hardware più adatta ai nostri scopi.

Gestione CPU in Hyper-V

All’interno della configurazione della macchina virtuale è possibile modificare il valore delle vCPU da assegnare – figura 1. L’aumento, o la diminuzione, lo si può fare solamente a VM spenta (almeno per ora).

Figura 1 – Configurazione vCPU

Il valore massimo di vCPU assegnabili per singola VM è dato dal numero di core disponibili tra le varie pCPU; questo comporta che non potete creare una macchina virtuale con 64 vCPU quando la vostra macchina ha a bordo solo 4 pCPU.

Questo valore si ricava in modo semplice, ovvero:

(Number of processors) * (Number of cores) * (Number of threads per core)

Vediamo un esempio su questa macchina mostrata nella figura 2.

Figura 2 – Parametri CPU

Il calcolo sarà 1 (processor) * 2 (core) * 2 (threads) = 4; quindi potrò creare una macchina virtuale con massimo 4 vCPU, oltre questa soglia non potrà essere avviata perché Hyper-V non è capace di gestire l’overcommit.

NB: in questo caso l’hyper-threading è attivo ed è per questo che il numero è 4, altrimenti sarebbe stato 2.

Ratio Applicativo

Avere a disposizione 4 vCPU non significa non poter creare più di 4 macchine virtuali, ma la cosa va ad impattare sulle performance. In verità questa affermazione è vera a metà, perché tutto dipende dal Ratio Applicativo, ovvero quanto uno specifico applicativo può essere partizionato a livello di CPU.

Prima di andare avanti con la spiegazione, vediamo alcuni Ratio Applicativi:

  • Exchange Server: 1:1
  • SQL Server: 1:1 fino a 4:1 (quando le richieste sono molto basse)
  • SharePoint Server: 1:1 (8:1 in ambienti di test)
  • VDI 12:1

La formula per calcolare i limiti è così composta:

(Number of processors) * (Number of cores) * (Number of threads per core) * (ratio)

Cosa significano questi valori? Nel caso di Exchange Server, è necessario associare una vCPU ad una pCPU e quindi prendendo in considerazione il nostro host con a disposizione 4 vCPU, potremmo creare 2 VM con 2 vCPU/cad.

Nel caso di SQL Server, con un carico non troppo elevato, potremmo adottare un Ratio di 2:1 e quindi calcolare il valore tramite la formula:

1 (processor) * 2 (core) * 2 (threads) * 2 (ratio) = 8

Questo significa poter creare 2 VM con 4vCPU/cad.

Meno è pesante il workload e più il Ratio diventa ampio, come si può notare per gli ambienti VDI dove possiamo raggiungere il valore di 48 VM con ognuna 1 vCPU.

Ovviamente i valori sono quelli che rientrano nelle best-practice e non sono vincolanti per l’utilizzo del proprio ambiente, né impediscono ad Hyper-V l’avvio delle macchine virtuali stessi (da quel punto di vista, solo la mancanza di memoria allocabile impedisce l’avvio di una VM).

Tuttavia è giusto tenere in considerazione che se abbiamo un host con 48 vCPU ed al suo interno mettiamo 3 Exchange con 4 vCPU, 2 SQL Server con 4 vCPU, i Domain Controller, diversi Web Server ed altre VM a contorno, di sicuro avremmo un crollo di prestazioni non da poco.

Ratio Applicativo di Default

Formule e calcoli non risolvono la questione più semplice: qual è il Ratio di default da applicare? Non esiste niente di scritto ma nella maggior parte dei servizi di Windows si può adottare un rapporto di 4:1, tranne quando ci sono workload molto intensivi, come dei File Server o dei Web Server, che potrebbero spostare il rapporto a 2:1 se non a 1:1. Le valutazione dovete farle voi e testare attentamente l’ambiente di produzione.

Problemi di Performance

Le prime avvisaglie di un’errata configurazione a livello di CPU, sono date da un rallentamento abbastanza rilevante della vostra macchina virtuale. Ad esempio l’apertura di una cartella di rete può risultare lenta, oppure l’apertura di una sessione RDP può richiedere più tempo del previsto. In questo caso aprendo il Task Manager della VM si potrebbe notare che la CPU rimane per troppo tempo sopra la soglia del 90% di utilizzo. Per risolvere il problema può bastare aggiungere una vCPU alla macchina virtuale; tuttavia se avete sforato il corretto Ratio, questa operazione potrebbe solo portare a creare problemi alle altre VM presenti.

Server Core e Nano Server

È noto che una parte delle risorse allocate vengono assegnate ai servizi di Windows e quindi ridurre il numero di task aiuta, non solo la componente di sicurezza ma anche, a fare in modo che le risorse possano essere usate a pieno da parte dei vari applicativi.

Da questo punto di vista, due alleati sono Server Core e Nano Server, dove il primo ha tutte le funzionalità di Windows Server, interfaccia grafica esclusa, mentre il secondo ha una serie limitate di funzionalità ma il suo footprint è praticamente ridotto a zero.

Nano Server è stato introdotto con Windows Server 2016 e consuma poca RAM (anche 128MB) ed occupa circa 600MB su disco…..un niente se paragonato alla classica installazione di Windows Server.

Il problema di Nano Server è, oltre al fatto che non supporta tutti i ruoli, che può essere utilizzato solamente da chi ha una Software Assurance e quindi molte aziende sono già tagliate fuori.

Monitoring e Prevenzione

A meno che non si voglia passare tutto il tempo a controllare l’andamento delle macchine virtuali configurate, è necessario avere una piattaforma di monitoring capace di capire l’andamento della nostra infrastruttura ed avvisarci quando qualcosa non funziona nel modo corretto. A tal proposito Operations Management Suite è la soluzione che può venire in aiuto a diversi IT Pro, grazie alla sua componente di Capacity & Performance, come mostra la figura 3.

Figura 3 – OMS Capacity and Performance

La solution vi permette di tracciare l’andamento delle vostre macchine virtuali, oltre che dei vari host di virtualizzazione, tenendo sotto controllo il carico delle varie vCPU. Da non sottovalutare la possibilità di generare Alert quando si supera una certa soglia in modo prolungato, che può anche scatenare un task presente all’interno di Azure Automation (es. la migrazione verso un altro host di virtualizzazione oppure la modificare del piano, nel caso sia una macchina virtuale IaaS presente in Microsoft Azure).

Conclusione

Ancora una volta abbiamo visto che saper dimensionare e configurare correttamente il proprio ambiente è un aspetto critico per non incappare in problemi di performance o, peggio ancora, nell’acquisto di nuovo hardware. Prima di approntare ad un nuovo progetto, valutate attentamente i dettagli e scegliete anche la giusta SKU di Windows Server, per ridurre l’utilizzo delle risorse ed ottimizzare l’infrastruttura.