Virtualizzazione ed equazione del dimensionamento dei server

Virtualizzazione ed equazione del dimensionamento dei server

Virtualizzazione fa spesso rima con necessità architetturali che devono essere prestabilite con precisione, per evitare problemi di sottodimensionamento delle macchine virtuali e, al contempo, difficoltà legate alla gestione dei costi delle licenze.

Ci si ritrova subito davanti a un’equazione che sembra difficile da bilanciare, in quanto da un lato bisogna soddisfare le esigenze degli utenti che useranno la macchina virtuale e dall’altro bisogna contenere il budget.

In realtà, esistono alcune indicazioni generali che consentono di dimensionare correttamente i server dal punto di vista della CPU e della memoria RAM per ospitare il numero corretto di macchine virtuali e fare in modo che la virtualizzazione sia efficace ed efficiente.

Dimensionamento virtualizzazione, dai socket ai core

Per prima cosa, è necessario cercare di capire quante macchine virtuali si vuole ospitare su un singolo host presente in farm. Questa informazione darà immediata contezza di quante CPU fisiche bisogna dotare i server, considerando che ormai la maggior parte dei rack ha come opzioni il supporto dual o quad socket.

In realtà, nessuno obbliga a riempire tutti i socket disponibili, anche perché le tecnologie moderne come ad esempio l’Hyper-Threading e le particolari architetture sviluppate dai diversi produttori di microprocessori sono tali da consentire a una singola CPU di svolgere il lavoro di due o più CPU contemporaneamente.

Al di là di queste considerazioni, non si consiglia mai di andare oltre i 30 core per singola CPU fisica, in quanto si rischierebbe di non dare la giusta potenza elaborativa a ogni singola macchina virtuale.

In questo modo, se la virtualizzazione viene eseguita con rack dual socket, si ha l’opportunità di arrivare a ospitare circa 60 core per ogni singolo host.

Regole di virtualizzazione, dai core alle macchine virtuali

A questo punto, definito il numero massimo di core ricavabili da ogni singola CPU fisica, si deve passare al dimensionamento della macchina virtuale, chiedendosi quanti core è necessario associare a ciascuna di esse.

Di norma, un sistema operativo come Windows Server funziona egregiamente a partire da due vCPU, ma muovendosi verso versioni più recenti e verso carichi applicativi più importanti, questa esigenza potrebbe spostarsi ulteriormente in avanti, obbligando l’assegnazione di due o quattro core per macchina virtuale.

Tornando un attimo indietro, si capisce bene come con una singola CPU montata nel rack e con esigenze che vadano da due a quattro core, si ha l’opportunità di attivare al massimo da 15 a 7 macchine virtuali.

Andare oltre, significherebbe sottodimensionare l’architettura di virtualizzazione, mentre usare quattro socket significherebbe avere a disposizione 120 core, attivabili su un massimo da 60 a 30 macchine virtuali.

Se un numero così elevato di macchine virtuali è necessario allora il sistema è ben dimensionato, altrimenti si rischia di sovradimensionare la progettazione.

In quest’ultimo caso, bisogna ricordare bene che per ogni socket montato si aggiungono i costi di licenza di determinate piattaforme Microsoft o VMware che garantiscono il funzionamento della virtualizzazione.

Se l’opzione a quattro socket è improponibile dal punto di vista dei costi, allora quella a due risulta la più corretta ed è capace di ospitare da 30 a 14 macchine virtuali.

Virtualizzazione, dalle macchine virtuali alla RAM

Non resta che fare un rapido calcolo dal punto di vista della memoria. Considerando che per ogni socket, di norma, un host è capace di supportare 96, 128, 192 o 256GB di memoria, in un sistema a due socket che ospita circa 30 macchine virtuali avranno bisogno di circa 120GB di RAM, supportabili dotando di 96 GB ogni singolo socket, per un totale di 192GB disponibili nel server e, quindi, con un disavanzo di circa 72GB che sono molto più che sufficienti per la gestione dell’host.

In realtà, questi 72GB di RAM vanno rispalmati sulle macchine virtuali, in quanto con 4GB di memoria per ogni macchina si coprono solo le esigenze del sistema operativo (nel caso di Windows Server 2003). In realtà, se si considerano almeno altri 2GB di RAM per ogni singola macchina, si ha un margine di 12GB di RAM di riserva, che è più che sufficiente.

Se si cambia sistema operativo o cambiano le esigenze applicative delle macchine che partecipano alla virtualizzazione, allora il conteggio si modifica di conseguenza.

Se si prende in considerazione il fabbisogno RAM di Windows Server 2012, pari a 8GB e si decide di lasciare 4GB di RAM disponibile per le esigenze applicative, allora su due socket (cioè per 30 macchine virtuali) è necessario allocare 240GB di RAM per la gestione degli OS e 120GB per gli applicativi, per un totale di 360GB di RAM.

Il taglio più vicino è pari a 384GB, ottenibile associando 192GB per ogni socket. Sottraendo ai 384GB i 360GB necessari, si ottiene un margine di 24GB di RAM, utile per far fronte a qualsiasi esigenza.

Insomma, dimensionare i server per far posto alla virtualizzazione non è sempre semplice, ma basta un po’ di attenzione e qualche accorgimento matematico per ottenere il giusto equilibrio fra potenza e costi.