Linux üzerinde hiper iş parçacıklı cpu yük ölçüsü


12

Çok çekirdekli hiper iş parçacığı özellikli CPU'nun gerçek kullanımını nasıl alabilirim?

Örneğin, 4 sanal çekirdeği ifade eden 2 çekirdekli bir CPU düşünelim.

topSanal çekirdeklerin bir çekirdeği tamamen kullanıldığından, tek iş parçacıklı bir iş yükü şimdi% 100 olarak görünecektir . CPU ve topbeklendiği gibi çalışır, 4 gerçek çekirdek olacak gibi.

Bununla birlikte, iki iş parçacığı ile işler artar: Her şey iyi çalışırsa, iki gerçek çekirdekle dengelenir, bu yüzden% 200 kullanımımız var: İki kez% 100 ve iki boş sanal çekirdek ve mevcut tüm CPU gücünü kullanıyor . Bana iyi geliyor.

Ancak, iki iş parçacığı tek bir gerçek çekirdek üzerinde çalışırsa, iki kez% 100 kullandıklarını gösterir, bu da% 200 sanal çekirdek kullanımı yapar. Ama gerçekte, bu, iki işlemci üzerindeki gücünü paylaşan bir çekirdek olurdu, bu da toplam CPU gücünün sadece yarısını kullanıyor.

Dolayısıyla, tarafından gösterilen kullanım sayıları toptoplam CPU iş yükünü ölçmek için kullanılamaz.

Ayrıca hiper iş parçacığın gerçek bir çekirdek üzerinde iki sanalı nasıl dengelediğini merak ediyorum. İki iş parçacığı farklı miktarda döngü alırsa, sanal çekirdekler gerçek yük farklı olsa bile her ikisinin de% 100 yük göstermesini sağlayacak şekilde uyarlanır mı?


1
Operatör sisteminin hiper iş parçacıklı bir sanal çekirdek ile fiziksel çekirdek arasındaki farkın farkında olmadığını biliyor musunuz?
Ramhound

Öyle görünüyor, ama zorunda değil mi? Gerçek ve sanal çekirdek haritalama basit bir iki harita. Sorun, gerçek çekirdekte başka bir tane ile programlanarak mevcut performansını gerçekten değiştiren sanal bir çekirdek üzerindeki yükün nasıl ölçüleceğidir. Ama tüm veriler mevcut bence, soru, bunlardan doğru sonucu alan araçlar nerede?
dronus

1
Sadece% 100'ün her gerçek çekirdeğin her döngüsünün kullanıldığı anlamına geleceği bir yük ölçüsüne sahip olmayı seviyorum.
dronus

1
Basitçe konuşulursa: CPU'mun halen devam etmekte olan işi yavaşlatmadan daha fazla çalışma yapabileceğini nasıl anlayabilirim?
dronus

1
@Ramhound, yani 8 mantıksal çekirdekli fiziksel bir 4 çekirdekli işlemcim varsa ve yük ortalamalarım 4.00 diyorsa,% 100 kullanımda mı yoksa% 50'de mi?
Buttle Butkus

Yanıtlar:


5

Oracle'dan Martin Tegtmeier geçen yıl hakkında ilginç bir blog yazısı yazdı: https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2

Kısa cevap; Hiper iş parçacığı, topun genel cpu kullanımı / cpu-boşta kalma yüzdelerini rapor etme yeteneğiyle gerçekten uğraşır.

En kötü durumda, çekirdek başına% 100 deneyimde 2 iş parçacığı çalıştıran 2 çekirdekli 4-sanal çekirdekli CPU, CPU'yu neredeyse doyurabilir. (Yürütme bağlantı noktası kullanımına bağlı olarak, yalnızca CPU'da tamamen farklı bilgi işlem kaynakları kullanan iş parçacıkları geçerli iş parçacığındaki performansı etkilemeden yine de çalışabilir.) Ancak, bu durumda üst% 50 boşta rapor edecektir.


1
Mevcut çalışma bağlantısı: blogs.oracle.com/partnertech/…
Ján Lalinský

4

Çekirdek kullanımı sistemdeki yükten çok farklıdır. Çekirdek kullanımı yalnızca çekirdeğin bir şeyi hesapladığını veya talimatları beklediğini gösterir. CPU'nun bir şey hesapladığı herhangi bir zamana karşılık gelen% 100 olabilir.

Ancak yük farklı bir şeydir, yük genellikle herhangi bir işlemin herhangi bir kaynak için beklemesi gerekip gerekmediğini belirlemek için ölçülür. Süreçler herhangi bir kaynak beklemiyorsa çok performanslı bir sistem göreceksiniz. Ancak bazen yavaş sistemler, ancak düşük CPU kullanımı göreceksiniz. Bu genellikle bazı işlemlerin bir kaynak beklediği ve CPU'yu serbest bırakmadığı anlamına gelir. Bu tür bir senaryo için yüksek CPU kullanımı görmeyeceksiniz, ancak sistem kapasitesinin çok üzerinde olabilir.

Linux sisteminde Yük ortalaması, bir sistemin genel performansını ölçmek için hesaplanan bir değerdir. Yük ortalamasının değeri, spesifik olan çekirdek hesaplama kaynaklarıyla karşılaştırılmalıdır. Dolayısıyla, 4 fiziksel çekirdeğe sahip bir sistemin yük ortalaması 4 veya daha fazla ise, bazı işlemlerin bir kaynak bekleyeceğini güvenle söyleyebiliriz.

CPU kullanımının yüzde 100 veya 10 olması önemli değildir. Yük ortalaması 200 veya 300 kadar yüksek olabilir, bu durumlarda sistem zar zor yanıt verecektir.

Normal çalışma koşullarında, sunucu yük ortalaması uzun süre için çekirdek sayısını aşmamalıdır. Bence kısa ani artışlar önemli değil. Bir wçıktıda göreceğiniz 3 sayı yük av'dır. 1/5/15 dakika boyunca.


0

Bence yukarıdaki cevapların hiçbiri tatmin edici değil.

Aşağıdaki bağlantıya atıfta bulunduğum makalenin bu soruyu cevaplamak için iyi hedeflendiğini düşünüyorum: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

ALINTI:

HT'nin arkasındaki fikir, o anda çalışan uygulama durduğunda farklı bir uygulama iş parçacığının çalışmasına izin vermektir; şube yanlış tahminleri, boru hattındaki kabarcıklar, vb. nedeniyle. Bunu mümkün kılmak için başka bir liman veya AS kaydı olması gerekir. HT etkinleştirildiğinde bu kayıt OS tarafından görünür hale gelir. Bununla birlikte, işletim sistemi (ve gıda zincirini kullandığınız mükemmel araçlara kadar), işlemci kapasitesinin iki katı olduğunu, yani her AS bağlantı noktasında% 100 CPU olduğunu düşünüyor.

Ancak kaputun altında hala tek bir yürütme birimi var: HT etkinleştirilmeden önce başlattığınız tek, fiziksel, çekirdek. Aradaki fark, 2 AS portu arasında bir şekilde paylaşılmasıdır. Tek çekirdeğin iki bağlantı noktası arasında nasıl geçişi çok karmaşıktır ancak sorgulanan kuyruklar açısından en kolay anlaşılır. GCaP sınıflarımda bu ayrıntı düzeyine giriyorum.

Sahip olduğum en iyi durum test ölçümleri, her HT bağlantı noktasının, işletim sistemine göre ortalama olarak beklenen% 200 kapasitenin% 75'inden fazla meşgul olamayacağını gösterir. Daha önce bahsettiğim "eksik"% 50 kapasite bir yanılsamadır. Intel, genel uygulamalar için% 120 ila% 130 aralığında bir şey beklendiğini iddia etti.

Aslında, işletim sisteminin her sanal çekirdeğin% 100'üne ulaşabileceğinden eminim, hiç şüphe yok. Ben sadece bir yaptım:

mvn clean install -DskipTests -T 5

8 sanal çekirdeğimi ve 4 fiziksel çekirdeğin% 100 CPU kullanımına gittiğini garanti ederim. Ve kesinlikle makinemde 8 çekirdek yok.

Uzun lafın kısası, toplam CPU yükünün en fazla% 100'ün üzerine çıkması ve büyük olasılıkla tam olarak% 100 fiziksel çekirdeğin kullanılmasıyla aşağıdakileri varsayabilirsiniz. Bu menas, fiziksel CORE 1 işletim sistemi CPU 1 ve CPU 2'ye ayrıldıysa ve CPU 1'de toplam kullanımınız% 50 ve CPU 2'de toplam kullanımınız% 50, büyük olasılıkla gerçek hayatta bu CPU üzerinde% 100 toplam kullanım basıncı uygular. Siz bunu en üst düzeye çıkardınız.

Ama tabii ki, sistem izleme araçlarındaki işletim sisteminin, bir yanılsama sattığı konusunda hiçbir fikri yoktur. İşletim sistemi açısından ve kaynakları nasıl yönettiğinden, sadece bu iki sanal çekirdeğin her birinin hala yüzde 50 boşta olduğuna inanacak, bu yüzden çalıştırılacak daha fazla görev varsa, bunları bu iki çekirdek üzerinde eşit olarak dağıtmaya çalışacak . Bu nedenle,% 100'ün üzerinde CPU kullanımından geçtiğinizde, CPU kullanımının bir döneminde, CPU'da zaman sclice almak için hiçbir zaman bir değişiklik yapmayan bu dönemde çalışmak için her zaman sıraya alınmış bir çalışma vardır. Sonunda bunu alacak, ancak çalışması planlanmış olsa bile aslında çalışmayan bazı iş parçacıkları her zaman vardır.

Teşekkürler

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.