none
Gestione delle Performance in ambienti virtualizzati: Monitoraggio del Processore

    Discussione generale

  • Abbreviazioni e glossario:

    Hypervisor: è un software che permette di far funzionare più di un sistema operativo sullo stesso hardware

    Partition: è un sistema operativo visto dell’Hypervisor

    Root Parent Partition (anche Parent Partition):  è il sistema operativo installato sull’Hardware fisico, su cui vengono fatte girare le VM

    Child Partition: è il sistema operativo installato sulla macchina virtuale, per assonanza viene usato anche per indicare una macchina virtuale o Virtual Machine. Si trova anche  indicato anche come Guest Partition o sistema operativo Guest

    VM: Virtual Machine

    LP: Logical Processor. Sono i core fisici presenti sul server

    VP: Virtual Processor. Sono i processori virtuali assegnati alle VM

     Con l’avvento massivo della virtualizzazione, si pone il problema di monitorare le performance sia degli Host Fisici che delle Macchine virtuali. In questo articolo analizzeremo come monitorare l’utilizzo e le performance del processore.

    Prima un pò di numeri, la seguente tabella riassume l’evoluzione delle varie versioni di Hyper-V sia dal punto di vista dei processori supportati che delle nuove funzionalità introdotte. 

    Virtualization Feature

    WS08 + RTM Hyper-V

    WS08 SP2 Hyper-V

    Windows Server 2008 R2 Hyper-V

    Logical Processor Support

    16

    24

    64

    Total number of powered on VM’s

    128

    192

    384

    Total Virtual Processors Supported

    128

    192

    512

    Guest Virtual Processor Support

    4 (WS08 only)

    4 (WS08 only)

    4 (Win7/WS08)

    Address Space Management

    Software Only

    Software Only

    Hardware where available

    (EPT on Intel and Rapid Virtualization Indexing on AMD)

    Core Parking / Deeper Sleep States (C3)

    No – Limited C states

    No – Limited C states

    Yes

     

    Nota: con Logical Processor (da qui LP) si intendono i core fisici, per cui se ho un server con 2 processori quad core ho 8 LP. Con Virtual Processor (da qui VP)si intendono i processori assegnati alle Macchine Virtuali. Con questa ultima versione si supportano un massimo di 8 VP per ogni LP. Quindi, sempre con 1 server con 2 processori quad core,  posso avere al massimo 64 LP attivi. Non è un blocco fisico, ma non è supportato un numero maggiore di VP e ci possono essere dei problemi di funzionamento.

    Architettura di Hyper-V

    L’ Hyper-V ha tre component principali, il virtstack, i device, e l’hypervisor. Il sistema operativo Windows Server 2008 R2, la Parent Partition (installato sull’Hardware fisico),  lancia il virtstack e l’hypervisor. Il  virtstack gestisce i device emulate, gestisce le VM, gestisce l’I/O, ecc.. L’hypervisor è responsable della schedulazione dei Virtual Processor, della gestione degli interrupt, dei timer, e del controllo delle altre funzionalità a livello di chip.L’hypervisor non vede i device o l’I/O, non carica dei driver per le varie periferiche di I/O. I device sono gestiti dalla Parent Partition e vengono esposti alle VM tramite gli Integration Service.

    Fig. 00

    Quindi la Parent Partition ha una vista globale del sistema, controlla le VM e fornisce le informazioni di monitoraggio tramite  WMI e i Performance Counter.

    Quindi il monitoraggio verrà effettuato dalla Parent Partition utlizzando i Performance Counter introdoti con l’installazione del ruolo di Hyper-V.

    Ambiente di test utilizzato

    -        Host Fisico (Parent Partition)

    o   Hostname: FGSNB02

    o   Processore Intel Core 2 Duo CPU (Dual Core) T 7500  2.20 GHz

    o   Ram: 4 GB

    o   Sistema Operativo: Windows Server 2008 R2

    -        VM 1 (Child Partition)

    o   Hostname: S8r2-DC04

    o   1 VP assegnato

    o   768 MB di ram assegnata

    o   Sistema Operativo: Windows Server 2008 R2

    -        VM 2 (Child Partition)

    o   Hostname: S8r2-TS02

    o   2 VP assegnati

    o   768 MB di ram assegnata

    o   Sistema Operativo: Windows Server 2008 R2

     Informazioni Globali di performance

    Per analizzare le informazioni globali utilizziamo due performance counter: Hyper-V Virtual Machine Health Summary  e Hyper-V Hypervisor

    Hyper-V Virtual Machine Health Summary indica semplicemente se le VM hanno “Health Ok” oppure “Health Critical”, per esempio una VM è in stato “Health Critical” se non riesce a connettersi a uno dei VHD che ha assegnato.

    Fig 01 

    Nel mio caso ci sono 35 VM in stato “Health Ok”. Non è necessario che siano avviate.

    Hyper-V Hypervisor ha una serie di indicatori utili per definire quante VM ho attive e quanti VP e LP sto utilizzando.

    Hyper-V Hypervisor \ Partitions mi indica quanti sistemi operativi ho attivi. Dal punto di vista dell’hypervisor ogni sistema operativo (anche la Parent Partition) è una partition.

    Fig 02

    Come vedete nel nostro caso risultano 3 partition, ovvero 3 sistemi operativi attivi: la Root Parent Partition (FGSNB02) e le due VM (S8r2-DC04 e S8r2-TS02).

    Hyper-V Hypervisor \ Logical Processor indica i processori fisici attivi, l’indicatore considera come processore ogni core presente (viene tenuto conto anche delle eventuali funzionalità di Hyperthreading presenti sul server). Quindi nel nostro caso (Intel Core 2 Duo CPU (Dual Core) T 7500  2.20 GHz) abbiamo 2 LP. Se avessimo anche l’HyperThreading attivo avremmo 4LP

    Fig 03 

    Hyper-V Hypervisor \ Virtual Processor indica i VP usati per far funzionare i sistemi operativi attivi.

    Fig 04

    In questo caso il performance counter indica 5 VP:

    -        1 VP per la VM S8r2-DC04

    -        2 VP per la VM S8r2-TS02

    -        2 VP per la Parent Partition FGSNB02. Quest’ultima è il sistema operativo che gira sull’host fisico, ma l’hypervisor non fa distinzione tra la Parent Partition e le child Partition (le VM), per l’hypervisor  sono tutti Sistemi Operativi che stanno girando sull’Hardware che lui gestisce e quindi considera i processori assegnati alla Parent Partition alla stessa stregua di quelli assegnati alle VM.


    martedì 26 ottobre 2010 09:21

Tutte le risposte

  •  Monitoraggio del processore

    Come prima cosa bisogna rilevare che, per monitorare le performance e l’utilizzo di risorse da parte delle VM, non è più possibile utilizzare il Task Manager sulla Root Parent Partition.

    Vediamo un primo esempio: sulla VM S8r2-DC04 ho lanciato un tool che simula l’utilizzo della CPU al 100 % (HeavyLoad v2.4 by JamSoft).

    Fig 05

    In alto a sinistra vediamo la VM s8r2-Dc04 e il relativo Task Manager, dove si vede la CPU al 100%, in alto a destra vediamo la VM S8r2-TS02, dove si vede che non vi è utilizzo di CPU. In basso in centro vediamo il task manager della Parent Partition, dove si vede che l’utilizzo della CPU è bassissimo, nonostante una delle VM stia usando il VP a lei assegnato al 100%. Questo perchè il Task Manager della Parent Partition visualizza il carico relativo al proprio sistema operativo  ma non riesce a monitorare la CPU assegnata dall’Hypervisor alle altre VM.

    Vediamo i performance counter da utilizzare per monitorare correttamente l’utilizzo del processore.

    Hyper-V Hypervisor Logical Processor.

    Manteniamo sempre attivo il tool che simula un carico di CPU del 100% su S8r2-DC04.

    Gli indicatori che ci interessano sono

    -        Hyper-V Hypervisor Logical Processor\ %Total Run Time. Indica la percentuale totale di tempo di processore  (stiamo parlando di LP, quindi si parla dell’uso dei processori fisici)

    -        Hyper-V Hypervisor Logical Processor\%Guest Run Time. Indica la percentuale di tempo di processore (LP) usato dalle VM. Quindi monitora quanto tempo di processore fisico (LP) viene usato dalle VM o, meglio, dai VP assegnati alle VM

    -        Hyper-V Hypervisor Logical Processor\%Hypervisor Run Time. Indica la percentuale di tempo di  processore usato dall’hypervisor per gestire l’ambiente virtuale. Per esempio per gestire il traffico di rete generato dalle VM.

    Verifichiamo nel nostro esempio:

    Fig 07-ProcTot01

    Qui vediamo che Hyper-V Hypervisor Logical Processor\ %Total Run Time è = a 52 % circa

    Fig 07-ProcTot02

    L’ Hyper-V Hypervisor Logical Processor\%Hypervisor Run Time è intorno al 2 %

    Fig 07-ProcTot03

    Hyper-V Hypervisor Logical Processor\%Guest Run Time è intorno al 51%

    Risultato finale: 2 % (Hyper-V Hypervisor Logical Processor\%Hypervisor Run Time) + 50% (Hyper-V Hypervisor Logical Processor\%Guest Run Time) = 53% Hyper-V Hypervisor Logical Processor\ %Total Run Time.

    Da notare che, teoricamente io ho una sola VM che usa il 100 % mentre la seconda non fa nulla, quindi potremmo aspettarci che il %Guest Run time arrivasse a più del 50 %.

    Questo non avviene per come vengono gestiti i VP, 1 VP non può “usare”  più cicli di CPU di quelli forniti da 1 LP. Quindi se io ho 2 core fisici (LP) e alla VM assegno 1 VP, quest’ultimo non potrà mai usare più di 1 LP.

    Inoltre i VP vengono gestiti come un normale processo che  richiede del tempo di CPU, quindi non si può assegnare una CPU in esclusiva a una VM, non posso assegnare in maniera esclusiva 1 LP a 1 VP. Sempre nel nostro caso, il VP assegnato alla VM S8r2-DC04 (in realtà il processo che gestisce questo VP), non “gira” solo su uno dei due LP, ma passa da uno all’altro.

    Vediamo altre immagini per spiegare meglio.

    Fig 06-Proc04

    In questo caso usiamo il Hyper-V Hypervisor Logical Processor\%Guest Run Time (Total). Questo indicatore ci mostra l’uso di LP assegnato alle VM (cioè ai VP). Vediamo che siamo intorno al 52% (è quasi tutto dedicato al VP assegnato alla VM S8r2-DC04 che ha la CPU al 100%, però è attiva anche la VM S8r2-TS02, quindi un minimo di consumo di porcessore è imputabile a questa ultima VM. Siamo nei dintorni del 2 %).

    Il perfomance counter Hyper-V Hypervisor Logical Processor\%Guest Run Time ha anche due istanze, una per il LP 0 e una per il LP 1 che sono proprio relative ai due core fisici presenti sul nostro hardware.

    Andiamo a vedere i dettagli per LP 0 e LP1 (i due LP del nostro processore fisico Core 2 Duo)

     Fig 06-Proc05

    Fig 06-Proc06

    Se analizziamo queste ultime due immagini vediamo che quando uno dei LP è al 100% l’altro è quasi a zero e viceversa. Si evidenzia quindi che il VP assegnato alla VM S8r2-DC04 “rimbalza” da LP 0 a LP 1.

    In questo esempio limite sarebbe più utile dedicare i LP al VP della VM, ma siamo appunto in un caso limite, quando si hanno molte  VM e quindi molti VP questo è il sistema più efficente.

     Hyper-V Hypervisor Virtual Processor

    Vediamo ora un performance counter che ci permetta una visione dell’utilizzo dei VP da parte delle VM.

    Hyper-V Hypervisor Virtual Processor\%Total Run Time. Indica il tempo  totale di processore usato dai VP

    Hyper-V Hypervisor Virtual Processor\%Hypervisor  Run Time. Indica il tempo di processore che i VP hanno usato per la parte di gestione (hypervisor code).

    Hyper-V Hypervisor Virtual Processor\%Guest Run Time. Indica il tempo di processore che i VP hanno usato per le VM.

    Tutti e 3 questi contatori hanno un’istanza per ognuna delle VM attive, quindi è possibile vedere i dettagli per singola VM.

    Nel nostro ambiente di test simuliamo un workload che usi il 100% della CPU solo sulla VM S8r2-TS02.

    Vediamo i dettagli del Hyper-V Hypervisor Virtual Processor\%Guest Run Time per singola VM.

    Come vedete l’ Hyper-V Hypervisor Virtual Processor\%Guest Run Time per l’istanza S8r2-DC04 ha un valore molto basso, la VM sta usando pochissimo il processore.

    Fig 08-Proc01

    Per la VM S8r2-TS02 si sono due istanze del performance counter, una per ogni VP assegnato all VM.

    Come vedete l’ Hyper-V Hypervisor Virtual Processor\%Guest Run Time per l’istanza S8r2-TS02:HV VP0 e  Hyper-V Hypervisor Virtual Processor\%Guest Run Time per l’istanza S8r2-TS02:HV VP1 hanno un valore molto elevato, la VM sta usando entrambi i VP assegnati quasi al 100% .

    Fig 08-Proc02

    Fig 08-Proc03 

    Conclusioni

    Per analizzare le   performance di un ambiente virtuale bisogna utilizzare i Performance Counter della Parent Partition:

    -        Hyper-V Hypervisor Logical Processor\%Guest Run Time ci dice la percentuale di tempo di processore fisico (Logical Processor) che viene usato dalle VM

    -        Hyper-V Hypervisor Virtual Processor\%Guest Run Time ci dice la percentuale di tempo di processore “virtuale” usato dai VP per far funzionare i Sistemi Operativi virtuali. Esiste un istanza di questo contatore per ogni VM.

    Quindi se vedo che Hyper-V Hypervisor Logical Processor\%Guest Run Time è elevato posso andare a verificare Hyper-V Hypervisor Virtual Processor\%Guest Run Time e analizzando tutte le istanze (ne esiste una specifica per ogni VM), vedo la (o le) VM che stanno usando la CPU.

    Un valore elevato per l’ Hyper-V Hypervisor Logical Processor\%Hypervisor Run Time può indicare che l’hypervisor sta usando molte risorse per la parte di gestione, per esempio per gestire un grosso througput di I/O (es: un grande traffico di rete tra due VM o verso l’esterno). In questo caso si registra un valore elevato anche per il contatore Hyper-V Hypervisor Virtual Processor\%Hypervisor  Run Time per l’istanza associata alla VM che genera il grosso througput di I/O.

    In questo caso è possibile valutare tecnologie Chimney o Virtual Machine Queue per ridurre l’I/O  di rete (queste tecnologie sono specifiche per il networking) gestito dell’hypervisor e delegarlo alle schede di rete.

    Vi ricordiamo che è possibile avere più VP per ogni LP e che il rapporto massimo è 8:1, quindi al massimo 8 VP per ogni LP. Non è un limite fisico e non c’è nessun controllo, per cui è possibile superare questo rapporto, assegnando più di 8 VP per ogni LP, ma NON è supportato e ci possono essere dei malfunzionamenti.

    Un’altra cosa molto importante da considerare è che i VP sono trattati come processi, per quanto riguarda l’allocazione di tempo di processore. Quindi più VP ho per ogni LP, più tempo di processore si spreca per gestire l’assegnazione di tempo di calcolo ai vari VP (context switch).

    Nel nostro esempio, con 2 LP, io potrei assegnare 1 VP a ciascuna delle due VM per un totale di 2 VP gestiti da 2 LP, oppure potrei assegnare 2 VP a ciascuna delle due VM per un totale di 4 VP gestiti da 2 LP. In questo secondo caso le performance delle due VM sono minore, perchè aumentano i context switch.

    In conclusione non bisogna assegnare più di 1 VP per VM a meno che il workload sulla VM lo richieda. Es: se ho una VM con 1 domain controller per 100 utenti 1 VP è più che sufficiente, se ho una VM con Operations Manager per gestire 500 server, devo assegnare almeno due VP.

    Come norma conviene seguire le best practice per lo specifico workload.


    martedì 26 ottobre 2010 09:22