C'è un equivalente di Windows di Unix 'CPU che ruba tempo'?

Per valutare l'accuratezza del monitoraggio delle performance sulle piattaforms di virtualizzazione, il tempo di rubata della CPU è diventato una metrica sempre più rilevante. Vedere il monitoraggio EC2: il caso della CPU rubata per un riepilogo istruttivo nel context di Amazon EC2 e della carta IBM spiegazione tecnica più approfondita (comprese le illustrazioni) del concetto:

Il tempo di furto è la percentuale di tempo in cui una CPU virtuale aspetta una reale CPU mentre l'ipervisore sta eseguendo un altro processre virtuale.

Di conseguenza, esso è esposto nella maggior parte degli strumenti di monitoraggio Unix / Linux attualmente in uso – vedere ad esempio colonne % steal o st in sar o top :

st – tempo di furto
La quantità di CPU "rubata" da questa macchina virtuale dall'ippervisore per altre attività (ad esempio eseguire un'altra macchina virtuale).

Non sono riuscito a capire come catturare la stessa metrica su Windows, ma è già ansible? (Idealmente per Windows 2000 Server R2 AMI su EC2 e tramite rispettivi contatori di performance Windows ovviamente.)

    2 Solutions collect form web for “C'è un equivalente di Windows di Unix 'CPU che ruba tempo'?”

    Modifica: Aggiornamento il 1 ottobre 2013 – Alcune delle mie risposte originali sono diventate obsolete.

    Non sono sicuro se sei ancora attivo in questo sito o che tu lo vedrai, ma volevo sapere che ho letto oggi questa domanda e mi ha affascinato e ho passato tutto il giorno (quando avrei dovuto sta lavorando) ricercando gli interni di Hyper-V e Windows e persino scavando nei concetti di virtualizzazione stessa sperando che potrei essere pronto a rispondere alla tua domanda.

    Lasciathemes prefisso affermando che io vengo dal punto di vista di Hyper-V come piattaforma di virtualizzazione perché è qui che ho la più esperienza. Anche se ci possono essere certi principi di virtualizzazione, come lo sappiamo, che non si può deviare, Microsoft e VMware e Xen hanno diverse strategie per come progettano i loro hypervisor.

    Questa è la prima cosa che rende la tua domanda impegnativa. Poni la tua domanda come se fosse ipervisore-agnostico, quando in verità non lo è. Amazon EC2, ad esempio, utilizza l'ipervisore Xen e la metrica "CPU Steal Time" visualizzata nell'output di un command top emesso da un Linux VM in esecuzione su quel hypervisor è il risultato dei servizi di integrazione installati in quell'ospite OS (o gli strumenti attenti alla virtualizzazione all'ospite) in combinazione con i dati forniti da quel specifico ipervisore.

    Innanzitutto, lasciathemes appena rispondere alla tua domanda: non c'è modo di vedere da dentro una macchina virtuale che esegue Windows quanto tempo i processri appartenenti alla macchina fisica su cui gestisce l'ipervisore spende fare altre cose, a less che i particolari strumenti virtuali / servizi o strumenti di virtualizzazione per il proprio hypervisor sono installati nell'ospite VM e il particolare hypervisor su cui l'ospite è in esecuzione espone tali dati all'ospite. Anche un guest di Windows in esecuzione su un hypervisor Hyper-V non avrà accesso immediato alle informazioni relative al tempo trascorso che i processri fisici sul hypervisor stanno facendo altre cose. (Per citare voretaq7, qualcosa che "rompe il quarto muro") Anche se i sisthemes operativi client e server Windows in esecuzione come ospiti virtuali in Hyper-V con i corretti servizi / strumenti di integrazione installati, fanno uso di "illuminazioni" (che sono letteralmente il kernel modifiche di codice appositamente realizzate per i VM) che aumentano notevolmente le proprie performance nell'utilizzo delle risorse di un host fisico, la row è che l'ipervisore non deve dare più informazioni al sistema ospite che vuole. Ciò significa che l'ipervisore non deve dire a un ospite VM che altro sta facendo oltre a servire quel VM … a less che non lo desideri. E che informazioni su ciò che altri processri fisici stanno facendo è necessario per derivare una metrica dalla prospettiva del VM come "CPU Steal Time: la percentuale di tempo in cui il vCPU attende una CPU fisica".

    Come poteva sapere l'OS ospite se non fosse neanche realizzato che fosse in realtà virtualizzato?

    In altre parole, senza gli strumenti di integrazione corretta installati sull'ospite, il sistema ospite non saprà nemless che la sua CPU sia in realtà una CPU v . Non saprà nemless che esiste un'altra forza al di fuori di esso "rubando" i loops della CPU, quindi non esisterà sulla metà dell'ospite VM.

    VMware ha iniziato a esporre questi dati agli ospiti di Windows così come a ESXi 5.0. Anche gli strumenti di integrazione di VMware devono essere aggiornati all'ospite. Ecco un riferimento ; si riferiscono ad esso come "CPU Time Stolen".

    Un hypervisor come Hyper-V non consente agli ospiti l'accesso diretto a risorse fisiche come i processri fisici oi processri. Invece il hypervisor dà vDevs – dispositivi virtuali – come vCPUs.

    Un esempio primario del motivo: dite che un guest OS macchina virtuale fa la chiamata a scorrere il TLB (buffer di look-aside di traduzione) che è una componente fisica di una CPU fisica. Se l'OS ospite era autorizzato a cancellare l' integer TLB su un processre fisico, ciò avrebbe effetti negativi sul rendimento per tutti gli altri VM che avevano condiviso lo stesso TLB fisico. Nel caso di Windows, quella chiamata nel guest OS viene tradotta in una chiamata "hypercall" o "illuminata" che viene interpretata dall'ipervisore in modo che venga scorsa solo la sezione del TLB rilevante per quella macchina virtuale.


    (È interessante notare che i VM ospiti che non dispongono dei propri strumenti e / o servizi di integrazione potrebbero avere la capacità di influenzare la performance di tutti gli altri VM sullo stesso host, ma che è completamente fuori dall'ambito di questo argomento .)


    Tutto ciò per dire che si può ancora rilevare in un host Hyper-V il tempo che un processre virtuale ha trascorso in attesa che un vero e proprio processre diventi disponibile in modo che potrebbe essere in programma di eseguire. Ma è ansible vedere solo i dati su un hypervisor Hyper-V di Windows. Se è ansible vedere questo in altri ipervisori, invito gli altri a dirci come vedere questo in quell'ipervisore e anche se è esposto agli ospiti. (Edit 10/1/2013 Grazie a badensky 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 Core e il ruolo Hyper-V. E 'effettivamente lo stesso di qualsiasi Windows Server 2012 che esegue Hyper-V.

    Spara Perfmon sulla tua partizione padre, anche come ospite fisico. Carica questo contatore:

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

    Notenetworking che ci sarà un'istanza di quel contatore per each macchina virtuale su quel hypervisor e _Total. La definizione di Microsoft di tale contatore di Perfmon è:

    Il tempo medio (in nanosecondi) ha speso in attesa che un processre virtuale venga spedito su un processre logico.

    Ovviamente, si desidera che il numero sia il più basso ansible. Per i computer, l'attesa è quasi mai una buona cosa.

    Altri contatori di performance sul hypervisor che si desidera indagare sono Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time , % Hypervisor Run Time e % Total Run Time . Questi contatori forniscono le percentuali che potrebbero essere utilizzate per determinare i fatti, come quanti tempo i processri "reali" spendono facendo cose diverse da un servizio di VM o di tutti i VM.

    Quindi, in conclusione, la metrica che cerchi in una macchina virtuale guest dipende dall'ipervisore in cui è in esecuzione, se quel hypervisor sceglie di fornire i dati su come spende il suo tempo diverso da quello di servire quel VM e se l'ospite OS ha i giusti strumenti / servizi / driver di integrazione di virtualizzazione per essere consapevoli da rendersi conto che l'hypervisor sta rendendo disponibili tali dati.

    Non conosco alcun modo su un guest di Windows, gli strumenti di integrazione installati o less, per vedere quanto tempo, in termini di secondi o percentuale, che l'host di VM abbia speso la manutenzione o non la manutenzione rispetto al tempo totale del processre fisico. (Modifica 10/1/2013: ESXi 5.0 o meglio espone questi dati al guest VM attraverso gli strumenti di integrazione. Ancora niente su Hyper-V però.)

    FWIW, ho guardato solo i contatori di Perfmon di un server Windows 2008r2 in esecuzione in Hyper-V e non ho visto niente di tempo di rubli correlati (o di virtualizzazione a tutti).

      Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.