4 çekirdekli 8 iş parçacıklı bir sistemdeki sistem yükünü yorumlamanın uygun yolu


14

Hepimizin bildiği gibi, tek bir işlemci üzerindeki 1.00 yükü, % 100 yük olduğu anlamına gelir . Analog olarak dört çekirdekli 4.00 yük % 100 olacaktır .

4 çekirdekli 8 iplik işlemcideki yükü nasıl yorumlamalıyım? CPU'nun maksimum kapasitesine ne zaman ulaşabilirim? At 4,00 veya 8,00 ?

Yanıtlar:


17

Kesinlikle değil, ama çoğunlukla açık 1.00*n_cpu.

Yük şu anlama gelir: tek bir cpu sisteminde birden çok işlem varsa, görünüşte paralel çalışıyorlar. Ama bu doğru değil. Pratik olarak ne olur: çekirdek bir işleme 1/100 saniye verir ve ardından çalışmasını kesintiye uğratır. Ve sonraki 1/100 saniyeyi başka bir işleme verir.

Pratik olarak, "sonraki 1/100 saniye aralığımızı hangi süreç almalıyız?" Sorusuna karmaşık bir sezgisel tarama karar verecektir. Görev zamanlaması olarak adlandırılır .

Elbette engellenen işlemler, örneğin verilerini diskten okuduklarını bekledikleri bu görev zamanlamasından muaftır.

Yük ne diyor: şu anda sonraki 1/100 saniye zaman dilimlerini kaç işlem bekliyor. Tabii ki, bu ortalama bir değer. Bunun nedeni, a cat /proc/loadavg.

Çok işlemcili bir sistemdeki durum biraz karmaşıktır. Zaman çerçeveleri birden çok işleme verilebilen birden fazla cpus vardır. Bu, görev zamanlamasını biraz - ama çok fazla değil - karmaşık hale getirir. Fakat durum aynı.

Çekirdek akıllıdır, en uygun verimlilik için sistem kaynaklarını paylaşmaya çalışır ve bunun yakınındadır (küçük optimizasyon şeyleri vardır, örneğin bir işlem aynı anda mümkün olan en uzun süre çalıştırılacaksa daha iyidir önbellekleme nedeniyle cpu, ama orada önemli değil). Bunun nedeni, eğer 8 yükümüz varsa, bunun anlamı: bir dahaki sefere dilimlerini bekleyen 8 işlem vardır. 8 cpus'umuz varsa, bu zaman dilimlerini cpus'a bire bir verebiliriz ve böylece sistemimiz en uygun şekilde kullanılır.

A görürseniz top, gerçek çalışan işlem sayısının şaşırtıcı derecede düşük olduğunu görebilirsiniz: bunlar Rorada işaretlenen süreçlerdir . Gerçekten hardcore olmayan bir sistemde bile genellikle 5'in altındadır. Bunun nedeni, kısmen disklerden veya ağdan verilerini bekleyen işlemlerin de askıya alınmasıdır ( Süstte işaretlenmiştir ). Yük yalnızca işlemci kullanımını gösterir.

Disk yükünü de ölçmek için araçlar var, en azından cpu kullanım izlemesi kadar önemli olmalı, ancak bir şekilde burada profesyonel sysadmin dünyamızda çok iyi bilinmemektedir.


Windows araçları genellikle yükü gerçek cpus sayısına böler. Bu, bazı profesyonel Windows sistem yöneticisinin sistem yükünü bu işlemciye bölünmüş anlamda kullanmasına neden olur. Haklı değiller ve bunu onlara açıkladıktan sonra muhtemelen daha mutlu olacaklar.


Çok çekirdekli CPU'lar, aynı silikon çip üzerinde pratik olarak birden fazla CPU'dur. Fark yok.

Hiper iş parçacıklı CPU'ların ilginç bir yan etkisi vardır: cpu yüklemek hiper iş parçacıklı çiftlerini yavaşlatır. Ancak bu, normal görev zamanlamasının işlediği daha derin bir katman üzerinde gerçekleşir, ancak zamanlayıcının süreç hareket eden kararlarını etkileyebilir (ve yapmalıdır).

Ancak mevcut bakış açımızdan - sistem yükünü belirleyen şey - o kadar da önemli değil.


5

Yük ortalaması, ne düşündüğünüz anlamına gelmez. Anlık CPU kullanımı ile ilgili değil, kaç işlemin çalışmayı beklediğiyle ilgilidir. Genellikle bunun nedeni CPU isteyen birçok şeydir, ancak her zaman değil. Yaygın bir suçlu, IO - disk veya ağ için bekleyen bir süreçtir.

Çalışmayı ps -e vve işlem durum işaretlerini aramayı deneyin .

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").

Bu psmanpage'den, bu yüzden orada daha fazla ayrıntı bulabilirsiniz - Rve Dsüreçler muhtemelen özellikle ilgi çekicidir.

Her türlü nedenden ötürü yük ortalaması 'sivri uçlarla' sonuçlanabilir, bu yüzden 'bu sistem meşgul-ish' dışında başka bir şeyin gerçekten iyi bir ölçüsü değildir. Yük ortalamasını CPU çekirdeği ile eşlemede yavaşlamak size iyi gelmeyecektir.


4

Hiper iş parçacığı aslında 2. çekirdek olmadığından, hiçbir zaman çekirdeği% 200'e götürmez, ancak belirli iş yükleri için% 100'ün ötesine geçecektir.

Böylece maksimum yükünüz yaklaşık 4 ile 6 arasında bilinmeyen bir yerde

(tabii ki bu aşırı yüklendiğinde daha da yükselebilir, çünkü özellikle IO'yu beklerken çalıştırılabilir süreçleri sayar)


3

Bir Linux sisteminde sadece çalıştırılabilir kuyruktaki süreçler yükü hesaplamak için sayılmaz, aynı zamanda kesintisiz uyku durumlarında, wikipedia'da bulunanlar sayılır , böylece disk bekleyen birçok işlem olduğunda yükün yükselmesine neden olur.


Bunu bilmiyordum, aklında tutacak!
Bartek Szablowski

2

24 çekirdekli Xeon sistemimizde (2 soket x 12 çekirdek) bazı deneyler yaptım. Bu durumda Linux hiper iş parçacığını ayarlama şekli nedeniyle maksimum yük 48,0'dır.

Ancak, 48 çekirdeğin eşdeğerini elde edemezsiniz. Gözlemlediğim şey, ilk 24 mantıksal işlemcideki verimin yaklaşık% 90'ını elde etmenizdir, yani yük 24.0'a çalışırsa. Daha sonra kalan 24 mantıksal işlemci için yaklaşık% 10'luk ek bir verim elde edersiniz (yük 48.0'a kadar çalışır). Bunu düşünmenin bir başka yolu, 24 çekirdeğe 48 iş parçacığı çalıştırırsanız, hiper iş parçacığına karşı etkinleştirmezseniz, yaklaşık% 10-20'lik bir artış elde edeceğinizdir. Pazarlama adamlarının ima ettiği gibi% 100 artış değil.

Örneğin, bu gözlemi test etmenin bir yolu, 48 iş parçacığı (örneğin TBB veya elle tutulan iş parçacığı modeli kullanarak) çalıştıran ve daha sonra çalışan bir işlemdir.

time numactl --physcpubind=0-23  ./myprocess

ve sonra koş

time numactl --physcpubind=0-47  ./myprocess

İkincisi yaklaşık% 10-20 daha kısa sürede çalışmalıdır. İşleminiz yüksek G / Ç engellenmişse, sonuç farklı olabilir.

Birincisi, iş parçacıklarının yalnızca tek bir mantıksal işlemcide (her çekirdeğin) çalışmasına izin vererek hiper iş parçacığı devre dışı bırakırken, ikincisi iş parçacıklarının 2 mantıksal işlemcide (her çekirdeğin) çalışmasına izin vererek hiper iş parçacığına izin verir.

Her iki durumda da yük 48.0 olarak bildirilmelidir ... gördüğünüz gibi çok yanıltıcıdır.

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.