Unix 'CPU çalma süresi' Windows eşdeğeri var mı?


24

Sanallaştırma platformlarında doğruluğunu izleme performansını değerlendirmek amacıyla, CPU süresi çalmak haline gelmiştir giderek alakalı metrik - bkz EC2 izleme: çalıntı CPU dava bağlamında bir öğretici özeti için Amazon EC2 ve IBM'in kağıt üzerinde CPU zamanı muhasebesi a için Konseptin daha ayrıntılı teknik açıklaması (resimler dahil):

Çalma süresi, sanal bir CPU'nun gerçek bir CPU için beklediği sürenin yüzdesidir ve hipervizör başka bir sanal işlemciye hizmet verir.

Örneğin sütunları bakınız - Buna göre, günümüzde en çok ilgili Unix / Linux izleme araçları maruz kaldığı % çalmak veya st içinde sarveya top:

st - Zaman Çalma
Diğer sanal görevler için (başka bir sanal makine çalıştırmak gibi) hiper yönetici tarafından bu sanal makineden 'çalınan' CPU miktarı.

Aynı metriği Windows'ta nasıl yakalayacağımı bulamadım, ancak bu mümkün mü? ( EC2'deki Windows 2008 Server R2 AMI'ler ve tabii ki ilgili Windows Performans Sayaçları için idealdir .)

Yanıtlar:


33

Düzenleme: 1 Ekim 2013 tarihinde güncelleniyor - Orijinal cevabımın bir kısmı eski moda oldu.

Hala bu sitede aktif olup olmadığınızdan veya bunu göreceğinizden emin değilim, ancak bugün bu soruyu okuduğumu ve beni büyülediğini bilmenizi istedim ve bu yüzden bütün günümü (gerektiğinde çalışıyorlardı) Hyper-V ve Windows kurumlarını araştırıyorlar ve hatta sorunuzu cevaplamaya hazır olabileceğimi umarak sanallaştırmanın kavramlarını bile araştırıyorlar.

Hyper-V açısından sanallaştırma platformu olarak geldiğimi söyleyerek önsözlememe izin verin, çünkü en çok deneyime sahip olduğum yer burası. Belirli sanallaştırma prensipleri olsa da, bildiğimiz gibi, bunlardan sapma olamaz, Microsoft ve VMware ve Xen'in hepsinin hiper yöneticilerini nasıl tasarladıkları için farklı stratejileri vardır.

Sorunuzu zorlaştıran ilk şey bu. Sorunuzu, hiper-agnostikmiş gibi, gerçekte olmadığı zaman ortaya koyarsınız. Örneğin, Amazon EC2, Xen hiper denetleyicisini kullanır ve topbu hiper denetleyici üzerinde çalışan bir Linux VM içinden yayınlanan bir komutun çıktısında gördüğünüz "CPU Steal Time" metriğini , bu konuk işletim sistemine kurulu olan entegrasyon hizmetlerinin bir sonucudur. (veya konuğun sanallaştırmaya duyarlı araçları) o belirli hiper yönetici tarafından sağlanan verilerle bağlantılı olarak.

Öncelikle bana sadece dik sorunuza cevap olsun: Windows çalıştıran bir sanal makine içinden görmek için hiçbir yolu yoktur ne kadar zaman hipervizör çalışır başka şeyler yaparken harcadığı fiziksel makineler ait işlemciler, sürece özellikle sanal araçları / belirli hiper yönetici için hizmet veya sanallaştırma uyumlu araçları konuk yüklü olan VM veKonuğun üzerinde çalıştığı hiper yönetici, bu verileri konuğa sunar. Bir Hyper-V hipervizöründe çalışan bir Windows konuğu bile, hipervizördeki fiziksel işlemcilerin başka şeyler yapmak için harcadıkları süreye ilişkin bilgilere anında erişemeyecektir. (Voretaq7'den alıntı yapmak gerekirse, "dördüncü duvarı kıran" bir şeydir.) kod değişiklikler özellikle belirgin bir fiziksel konağın kaynakları kullanarak performanslarını artırmak VM'lerin) için yapılan, alt çizgi hiper yönetici olmamasıdır varKonuk işletim sistemine istediğinden daha fazla bilgi vermek. Araçlarla O hiper yönetici değil var o VM ... o istemediği sürece hiç servis dışında yapıyor başka ne bir konuk VM anlatmak için. Fiziksel işlemcilerin ne yaptıkları hakkında bu bilgi, "CPU Steal Time: vCPU'nun fiziksel bir CPU için beklediği sürenin yüzdesi" gibi, VM perspektifinden bir metrik türetmek için gereklidir.

Konuk işletim sistemi aslında sanallaştırıldığını bile anlamadıysa bunu nasıl bilebilirdi?

Başka bir deyişle, konuk yüklü doğru entegrasyon araçları olmadan, misafir işletim sistemi bile işlemci aslında bir olduğunu bilmeyecektir v işlemci. İşlemci döngülerinden "çalmak" dışında başka bir kuvvetin olduğunu bile bilmeyecek, bu nedenle konuk VM'de metrik olmayacak.

VMware, bu verileri Windows misafirlerine ve ESXi 5.0'a açıklamaya başladı. VMware entegrasyon araçlarının da konukta güncellenmesi gerekiyor. İşte bir referans ; "İşlemci Çalınan Süresi" olarak adlandırıyorlar.

Hyper-V gibi bir hiper yönetici, misafirlere fiziksel işlemciler veya işlemci çekirdeği gibi fiziksel kaynaklara doğrudan erişim sağlamaz. Bunun yerine, hipervizör onlara vDev'leri (vCPU'lar gibi sanal aygıtlar) verir.

Bunun başlıca bir örneği: Sanal makine misafirinin işletim sistemine geçmesi, fiziksel bir CPU'nun fiziksel bir bileşeni olan TLB'yi (çeviri görünüm kenarı tamponu) temizlemek için çağrı yaptığını söyler. Konuk işletim sisteminin TLB'nin tamamını fiziksel bir işlemcide temizlemesine izin verilirse , aynı fiziksel TLB'yi paylaşan diğer tüm VM'ler için de olumsuz performans etkileri olacaktır. Windows durumunda, konuk işletim sistemindeki bu çağrı, hipervizör tarafından yorumlanan "sanal arama" veya "aydınlanmış" bir çağrıya çevrilir, böylece TLB'nin yalnızca bu sanal makineyle ilgili bölümü temizlenir.


(İlginçtir ki, bana uygun entegrasyon araçlarına ve / veya hizmetlere sahip olmayan konuk VM'lerin aynı ana bilgisayardaki tüm diğer sanal makinelerin performansını etkileme yeteneğine sahip olabileceğini, ancak bu konunun kapsamı dışında kaldığını gösteriyor. .)


Bütün bunlar bir Hyper-V sunucusunda, sanal bir işlemcinin gerçek bir işlemcinin kullanıma hazır olmasını beklemek için harcadığı zamanı hala tespit edebileceğinizi söylemektedir . Ancak bu verileri yalnızca bir Windows Hyper-V hipervizöründe görebilirsiniz. Bunu diğer hipervizörlerde görmek mümkün ise, diğerlerini bu hipervizörde nasıl göreceğimizi ve konuklara açık olup olmadığını bize söylemelerini rica ediyorum. (Düzenleme 10.01.2013 Evilensky'yi tam da bunun için teşekkür ederim!)

Test makinem, yalnızca Core ve Hyper-V rolünü çalıştıran, Server 2012'nin ücretsiz sürümü olan Hyper-V Server 2012 idi. Etkin bir şekilde Hyper-V çalıştıran herhangi bir Windows Server 2012 ile aynıdır.

Fire up Ana bölümünüzdeki Perfmon, diğer bir deyişle fiziksel ana bilgisayar. Bu sayacı yükle:

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

Bu hiper denetleyicideki her sanal makine için o sayacın bir örneğinin ve _Total'ın olacağını fark edeceksiniz. Bu Perfmon sayacının Microsoft tanımı şöyledir:

Sanal işlemcinin bir mantıksal işlemciye gönderilmesini beklemek için harcanan ortalama süre (nanosaniye olarak).

Açıkçası, bu sayının mümkün olduğunca düşük olmasını istiyorsun. Bilgisayarlar için bekleme neredeyse hiç iyi bir şey değildir.

Araştırmak istediğiniz edeceğini hipervizör Diğer performans sayaçlarını vardır Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time, % Hypervisor Run Timeve % Total Run Time. Bu sayaçlar, "gerçek" işlemcilerin bir VM'ye veya tüm VM'lere hizmet vermekten başka şeyler yapmak için ne kadar zaman harcadıkları gibi gerçekleri belirlemek için kullanılabilecek yüzdeleri sağlar .

Sonuç olarak, konuk bir sanal makinede aradığınız metrik, üzerinde çalıştığı hipervizöre, hipervizörün, bu VM’ye hizmet etmekten başka zamanını nasıl harcayacağına ilişkin verileri sağlamayı seçip seçmemesine ve misafir olup olmadığını belirlemeye bağlıdır. İşletim sistemi, hipervizörün bu verileri sağladığını fark edecek kadar farkında olması için sanallaştırma entegrasyon araçlarına / hizmetlerine / sürücülerine sahiptir.

VM sunucusunun ne kadar zaman, saniye veya yüzde cinsinden ne kadar zaman harcadığını görmek için, VM sunucusunun toplam fiziksel işlemci saatine göre hizmet vermek için harcadığı ya da hizmet vermediğini bilmiyorum. (Düzenleme 10.01.2013: ESXi 5.0 veya daha iyisi bu verileri entegrasyon araçlarıyla konuk VM'ye sunar. Yine de Hyper-V'de hiçbir şey yoktur.)


1
+1 - epik cevap epik
Mark Henderson

1
Tam kapsamlı keşif için +1 gerçekten, çok takdir ediyorum. Yani EC2 ilgili bu görünüşte çalışan Unix / Linux misafirler aşağı kaynar Xen paravirtualbir olduğunu modunda paravirtualized alanı nerede, (misafir işletim sistemi ana bilgisayarda çalışacak şekilde modifiye edilir, yani değil tam sanallaştırma) zaman çalmak vs Windows / FreeBSD, kullanılabilir / ... misafirler çalışan Xen HVMbir olan donanım taklit alanı (yani misafir işletim sistemi ana bilgisayarda çalıştırmak için değiştirilmemiş olan) o görünüşte olmadığı, - kesin negatif cevap ne sayar olduğunu tahmin böylece. Sonunda eklenebileceğini doğru bir şekilde okudum mu?
Steffen Opel

2
Teorik olarak olabilir, ama nefesini tutmaz. Dediğim gibi, satıcıya özel hipervizörün ve satıcıya özel konuk işletim sisteminin fiziksel ana bilgisayar hakkındaki bu verileri konuk VM içinden erişilebilir ve erişilebilir kılmak için koordineli bir çaba göstermesini gerektirir. wiki.xen.org/wiki/Xen_Kernel_Feature_Matrix
Ryan Ries

2
Teğetsel: VMware hipervizörleri ekibi çalmaya hazır zaman olarak nitelendiriyor - sanal bir CPU'nun fiziksel bir kaynak tarafından hizmet edilmesini beklediği süre.
Yolo Perdiem 1212'de

1
bu ana bilgisayarda iyi bilinen bir konudur. Metrik yıllardır mevcuttu. Buna "cpu'da bekle" denir.

2

FWIW, Hyper-V altında çalışan bir Windows 2008r2 sunucusunun Perfmon sayaçlarına daha yeni baktım ve çalma süresiyle ilgili hiçbir şey görmedim (ya da bu konuda sanallaştırma).


Kontrol ettiğiniz için teşekkürler - görünüşe göre Hyper-V için Sanallaştırma Sayaçları gerçekten mevcut olmalı, belki de ilk önce bir şekilde kurulmalı / etkinleştirilmeli mi? Yine de bunlardan benzer / ilgili bir ölçüm belirleyemiyorum / çıkaramıyorum.
Steffen Opel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.