Esiste un equivalente Windows del "CPU steal time" di Unix?


24

Al fine di valutare l'accuratezza del monitoraggio delle prestazioni su piattaforme di virtualizzazione, il tempo di furto della CPU è diventato una metrica sempre più rilevante - vedi monitoraggio EC2: il caso della CPU rubata per un riepilogo istruttivo nel contesto di Amazon EC2 e l'articolo di IBM sulla contabilità del tempo della CPU per un spiegazione tecnica più approfondita (comprese le illustrazioni) del concetto:

Il tempo rubato è la percentuale di tempo in cui una CPU virtuale attende una CPU reale mentre l'hypervisor sta servendo un altro processore virtuale.

Di conseguenza, è esposto nella maggior parte degli strumenti di monitoraggio Unix / Linux al giorno d'oggi - vedi ad esempio colonne % steal o st in saro top:

st - Steal Time
La quantità di CPU "rubata" da questa macchina virtuale dall'hypervisor per altre attività (come l'esecuzione di un'altra macchina virtuale).

Non sono riuscito a capire come catturare la stessa metrica su Windows, è già possibile? (Idealmente per le AMI di Windows 2008 Server R2 su EC2 e ovviamente tramite i rispettivi contatori delle prestazioni di Windows .)

Risposte:


33

Modifica: Aggiornamento del 1 ottobre 2013 - Da allora alcune delle mie risposte originali sono diventate obsolete.

Non sono sicuro che tu sia ancora attivo su questo sito o che vedrai questo, ma volevo che tu sapessi che ho letto questa domanda oggi e che mi ha affascinato, e quindi ho trascorso tutto il giorno (quando avrei dovuto sto lavorando) alla ricerca degli interni di Hyper-V e Windows e persino scavando nei concetti stessi della virtualizzazione stessa nella speranza che io possa essere pronto a rispondere alla tua domanda.

Permettetemi di prefazione dicendo che sto arrivando dal punto di vista di Hyper-V come piattaforma di virtualizzazione perché è lì che ho più esperienza. Anche se potrebbero esserci determinati principi di virtualizzazione, come la conosciamo, da cui non è possibile deviare, Microsoft e VMware e Xen hanno tutti strategie diverse per il modo in cui progettano i loro hypervisor.

Questa è la prima cosa che rende la tua domanda difficile. Poni la tua domanda come se fosse un hypervisor-agnostico, quando in verità non lo è. Amazon EC2, ad esempio, utilizza l'hypervisor Xen e la metrica "CPU Steal Time" che vedi nell'output di un topcomando emesso da una VM Linux in esecuzione su quell'hypervisor è il risultato dei servizi di integrazione installati su quel SO guest (o strumenti compatibili con la virtualizzazione sul guest) insieme ai dati forniti da quel hypervisor specifico.

Prima di tutto, lasciami rispondere direttamente alla tua domanda: non c'è modo di vedere dall'interno di una macchina virtuale che esegue Windows quanto tempo i processori appartenenti alla macchina fisica su cui gira l'hypervisor trascorrono facendo altre cose, a meno che i particolari strumenti virtuali / i servizi o gli strumenti compatibili con la virtualizzazione per il proprio hypervisor specifico sono installati nella VM guest eil particolare hypervisor su cui è in esecuzione il guest espone tali dati al guest. Anche un guest Windows in esecuzione su un hypervisor Hyper-V non avrà accesso immediato alle informazioni relative al tempo impiegato dai processori fisici sull'hypervisor in altre attività. (Per citare Voretaq7, qualcosa che "rompe il quarto muro"). Anche se i sistemi operativi client e server Windows in esecuzione come guest virtualizzati in Hyper-V con i servizi / strumenti di integrazione corretti installati fanno uso di "illuminazioni" (che sono letteralmente kernel alterazioni del codice fatte apposta per le VM) che aumentano significativamente le loro prestazioni nell'uso delle risorse di un host fisico, la linea di fondo è che l'hypervisor non haper fornire al SO guest più informazioni di quante ne voglia. Ciò significa che l'hypervisor non deve dire a una VM guest cos'altro sta facendo oltre a riparare quella VM ... a meno che non voglia. E quell'informazione su cosa stanno facendo i processori fisici è necessaria per derivare una metrica dal punto di vista della VM come "CPU Steal Time: la percentuale di tempo in cui la vCPU attende una CPU fisica".

Come può il SO guest saperlo, se non si rendesse nemmeno conto di essere effettivamente virtualizzato?

In altre parole, senza i giusti strumenti di integrazione installati sul guest, il SO guest non saprà nemmeno che la sua CPU è in realtà una CPU v . Non saprà nemmeno che esiste un'altra forza al di fuori di sé che "ruba" i cicli della CPU da essa, quindi quella metrica non esisterà sulla VM guest.

VMware ha iniziato a esporre questi dati agli ospiti Windows e a ESXi 5.0. Anche gli strumenti di integrazione di VMware devono essere aggiornati sul guest. Ecco un riferimento ; si riferiscono ad esso come "Tempo rubato dalla CPU".

Un hypervisor come Hyper-V non offre agli ospiti l'accesso diretto a risorse fisiche come processori fisici o core del processore. Invece l'hypervisor fornisce loro vDev - dispositivi virtuali - come vCPU.

Un primo esempio del perché: supponiamo che un sistema operativo guest della macchina virtuale effettui la chiamata per svuotare il TLB (buffer di ricerca a scomparsa della traduzione) che è un componente fisico di una CPU fisica. Se il SO guest fosse autorizzato a cancellare l' intero TLB su un processore fisico, ciò avrebbe effetti negativi sulle prestazioni per tutte le altre VM che condividevano anche lo stesso TLB fisico. Nel caso di Windows, quella chiamata nel sistema operativo guest viene tradotta in una chiamata "hypercall" o "illuminata" che viene interpretata dall'hypervisor in modo che venga scaricata solo la sezione del TLB rilevante per quella macchina virtuale.


(È interessante notare che ciò mi suggerisce che le VM guest che non dispongono degli strumenti e / o servizi di integrazione adeguati potrebbero avere la capacità di influire sulle prestazioni di tutte le altre VM sullo stesso host, ma questo è completamente al di fuori dell'ambito di questo argomento .)


Tutto ciò per dire che è ancora possibile rilevare in un host Hyper-V il tempo che un processore virtuale ha trascorso in attesa della disponibilità di un processore reale in modo che potesse essere pianificato per l'esecuzione. Ma puoi vedere solo quei dati su un hypervisor Hyper-V di Windows. Se è possibile vederlo in altri hypervisor, esorto gli altri a dirci come vederlo in quell'hypervisor e anche se è esposto agli ospiti. (Modifica 01/10/2013 Grazie evilensky per aver fatto proprio questo!)

La mia macchina di prova era Hyper-V Server 2012, che è l'edizione gratuita di Server 2012 che esegue solo il ruolo Core e Hyper-V. È effettivamente lo stesso di qualsiasi Windows Server 2012 che esegue Hyper-V.

Accendi Perfmon sulla partizione principale, ovvero host fisico. Carica questo contatore:

Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*

Noterai che ci sarà un'istanza di quel contatore per ogni macchina virtuale su quell'hypervisor, oltre a _Total. La definizione Microsoft di quel contatore Perfmon è:

Il tempo medio (in nanosecondi) impiegato in attesa che un processore virtuale venga inviato a un processore logico.

Ovviamente, vuoi che quel numero sia il più basso possibile. Per i computer, l'attesa non è quasi mai una buona cosa.

Altri contatori delle prestazioni su hypervisor che si vorranno indagare sono Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time, % Hypervisor Run Timee % Total Run Time. Questi contatori forniscono le percentuali che potrebbero essere utilizzate per determinare fatti quali il tempo che i processori "reali" impiegano a svolgere attività diverse dalla manutenzione di una VM o di tutte le VM.

Quindi, in conclusione, la metrica che stai cercando in una macchina virtuale guest dipende dall'hypervisor su cui è in esecuzione, se quell'hypervisor sceglie di fornire i dati su come trascorre il suo tempo diverso dalla manutenzione della VM e se il guest Il sistema operativo ha i giusti strumenti / servizi / driver di integrazione della virtualizzazione per essere abbastanza consapevoli da rendersi conto che l'hypervisor sta rendendo disponibili quei dati.

Non conosco alcun modo su un guest Windows, strumenti di integrazione installati o meno, per vedere quanto tempo, in termini di secondi o percentuale, che l'host della VM ha impiegato per la manutenzione o non per la manutenzione rispetto al tempo totale del processore fisico. (Modifica 10/1/2013: ESXi 5.0 o superiore espone questi dati alla VM guest tramite gli strumenti di integrazione. Tuttavia, su Hyper-V non è ancora presente nulla.)


1
+1 - la risposta epica è epica
Mark Henderson

1
+1 per l'esplorazione approfondita davvero, molto apprezzato. Quindi per quanto riguarda EC2 questo apparentemente si riduce ai guest Unix / Linux in esecuzione in Xen paravirtualmodalità, che è un dominio paravirtualizzato (cioè non virtualizzazione completa, il sistema operativo guest viene modificato per essere eseguito sull'host), dove è disponibile il tempo di furto , rispetto a Windows / FreeBSD / ... guest in esecuzione Xen HVM, che è un dominio emulato dall'hardware (ovvero il sistema operativo guest non è modificato per essere eseguito sull'host), dove apparentemente non lo è - quindi una risposta negativa definita, indovina che è ciò che conta. Ho letto correttamente che alla fine potrebbe essere aggiunto?
Steffen Opel,

2
Potrebbe, in teoria, ma non trattenere il respiro. Come ho detto, è necessario che l'hypervisor specifico del fornitore e il SO guest specifico del fornitore faccia uno sforzo coordinato per rendere disponibili e accessibili tali dati sull'host fisico all'interno della VM guest. wiki.xen.org/wiki/Xen_Kernel_Feature_Matrix
Ryan Ries il

2
Tangenziale: gli hypervisor VMware faranno riferimento al furto del team come tempo di disponibilità - il tempo che una CPU virtuale è in attesa di essere servito da una risorsa fisica.
Yolo Perdiem,

1
questo è un argomento ben noto sul mainframe. La metrica è disponibile da decenni. Si chiama "wait on cpu".

2

FWIW, ho appena esaminato i contatori Perfmon di un server Windows 2008r2 in esecuzione su Hyper-V e non ho visto nulla correlato al furto del tempo (o alla virtualizzazione del resto).


Grazie per il controllo - apparentemente i contatori di virtualizzazione per Hyper-V dovrebbero effettivamente essere disponibili, forse devono essere installati / attivati ​​in qualche modo prima? Tuttavia, non sono ancora in grado di identificare / dedurre una metrica simile / correlata.
Steffen Opel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.