Hyperthreading ile kaç CPU kullanılmalıdır?


22

Diyelim ki 18 çekirdekli bir sunucu, hiper iş parçacığı açık, yani 36 cpus'u görebilirim.

İşlemciyi tam anlamıyla kullanabilmek ve tek iş parçacığı performansını etkilememek için, tüm 36 "çekirdeğin"% 100 çalışmasını hedeflemeli miyim, ve HT çekirdeği daha az çalışacak ve yine de% 100 rapor etmeli mi, yoksa bu “Dolu” çekirdekler zaten “HT çekirdeği” üzerindeki görevden dolayı kesiliyor ve bu nedenle daha az tek iş parçacıklı iş yapıyor?

HT performansını etkileyen birçok değişken bulunduğunun farkındayım, sadece HT ile çalışırken CPU sayaçlarının ne anlama geldiğini bilmek istiyorum.


6
Hyperthreading size gerçekten iki kat cpus vermez. Bir cpu'nun iki programda okuduğu gibi düşünün ve bir program birkaç döngü alacak bir şey yapmak üzereyken ya da tüm kaynakları kullanmadığında (toplayıcılar, çarpanlar, yükleyiciler vb.) başka bir program onları kullanabilir. Bu nedenle, tüm iş parçacıklarında % 100 görmek , bir çekirdek üzerinde çalışan uyumlu programların mutlu bir tesadüfünü gerektirir.
Simpleuser

4
Bu tasarım nedeniyle, hyperthreading karma iş yükleriyle iyi çalışır. Örneğin, tüm sanal makinelerin farklı hizmetler çalıştığı bir hiper yönetici. Bu tür bir senaryoda, muhtemelen test etmek bile gerekli değildir. Daha homojen iş yükleri için, emin olmak için test yapmak genellikle gereklidir.
Michael Hampton,

Yanıtlar:


14

Eğer ikinci sanal çekirdeğin birincinin ne zaman sıkışıp kalacağıma katkıda bulunmasına izin veriliyorsa, yapmamaktan iyidir , bu yüzden (en azından) biraz daha fazla iş yapılır.

Soru şu: İki farklı iplik ne zaman birinin daha kötü çalışmasına neden oluyor? Branş tahmini ve talimatlar arasındaki bağımlılıklar değişmez. Şimdi bellek erişimi bekleniyor ... iki iş parçacığı, hem önbellek kullanımı hem de bant genişliği açısından bellek erişimi üzerinde rekabet ediyor.

HT ile çalışan bazı CPU'larınız varsa ve diğerleri değilse, bu, bir türe veya diğerine belirli iş parçacıkları atayacağınız anlamına mı geliyor? Sanırım hayır: Programlarınız konularını rasgele sanal çekirdeklerde çalıştıracak. Peki yapılandırmayı bölmek nasıl yardımcı olur? Her bir işlemcinin kendi önbelleği olduğundan, tek etki bellek bant genişliğinden ve önbellek tutarlılığının yükünden kaynaklanır.

Nerede Genelde, bir noktaya sahip bir şey daha sen yapıyor olabilirdim bazı CPU yürütme birimleri boşta gitmesine izin daha pahalıdır. Bu, doğrudan iş parçacığı sayısına değil, iş parçacığının ne yaptığına ve çeşitli bileşenlerin ayrıntılı hafıza mimarisine ve performans nüanslarına bağlıdır.

Basit bir cevap yok. Akılda belirli bir program olsa bile, makine kendi deneyimlerini ile ilgili insanlarınkinden farklı olabilir.

Kendin denemek ve en hızlı olanı ölçmek zorundasın . Ve o zaman bile, yazılım güncellemeleri ve zaman içindeki kullanımı değiştirerek değişiklik gösterebilir.

Öfke'nin magnum opus hacmine 3 bak . Belirli bir işlemciye dikkatlice bakarsanız, kod yürütmek için gereken birçok adımın derin borusu arasında sınırlayıcı kaynaklar bulabilirsiniz. Daha fazla çalışmamanın aksine aşırı bağlılığın daha yavaş çalışmasına neden olduğu bir durum bulmanız gerekir. Genel olarak bu bir çeşit önbellek anlamına gelir; ve kaynağın iş parçacıkları arasında paylaşıldığı yer.


CPU sayacı ne anlama geliyor: boşta iş parçacığını çalıştırarak harcanmamış her zaman raporlar. Bir çekirdeğe atanan her iki mantıksal iş parçacığı, bunlardan birinde yapılan fiili iş küçük olsa bile boşta olmayacaktır. Boru hattı ile harcanan zaman, sonuçlar hazır olana, hafıza getirilinceye, atomik işlemlerle çevrilmiş, vb. ve zaman hala kullanımda olarak gösterir. RAM'de beklemek boşta görünmez. Yalnızca G / Ç gibi bir şey diş bloğunu tıkayacak ve doğru şarj süresini durduracaktır. Genel olarak bir işletim sistemi muteksi böyle olacaktır, ancak artık çok emin olmayan bir sistem olan yükselişe rağmen , bir " döndürme kilidi" ipliğin rafa geri gitmesini sağlamaz .

Bu nedenle,% 100'lük bir CPU metre, CPU sıklıkla bellek bekletilip sıkışmışsa, tümünün yelken açmak anlamına gelmez. % 90'ı gösteren daha az sayıda mantıksal çekirdek , sayıca çatlamayı tamamladığından ve şimdi diskte beklediğinden, daha fazla iş yapılması iyi olabilir .

Bu yüzden CPU sayacı hakkında endişelenmeyin. Sadece kaydedilen ilerlemeye bakın .


23

CPU sayaçları, hiper iş parçacıklı CPU'larınızdan ne kadar daha fazla performans elde edebileceğinizi söylemek için çok kötü. Bunun için kendi kıyas ölçütlerinizi çeşitli fiziksel çekirdek abonelik oranlarında kullanmalısınız. Tamamen kapalıyken HT ile en iyi şekilde çalışan bazı iş yükleri vardır, bu nedenle testinize bu durumu da ekleyin. 1: 2 (36 paralel işçi) veya 1: 1.5, hatta 1: 2.5 olabilir! İş yüküne bağlı.

Daha ayrıntılı olarak, HT, bir bağlamın değişmesi gerektiğinde veya dal tahmini başarısız olduğunda işlemcinin boş zamanını harcadığı zamanı azaltan şekillerde uygulanır. Bu, saf işletim sistemi püf noktalarına kıyasla% 100 yürütme birimi kullanımına daha kolay erişilmesini sağlar. HT, tanıtıldığından beri gelişti ve modern çiplerde 10 yıl önce kullandıklarımızdan daha fazla paralellik var.

En iyi abonelik noktanızın yerini etkileyecek iki yürütme profili vardır:

  • Uzun yürütme süresi . İşçileriniz geri dönüşümden önce, büyük render işleri veya çevre modellemesi gibi birkaç dakika boyunca çalışırlarsa, işçi başına daha verimli tek çekirdekli performans elde edersiniz. Bu oranınızı düşürür.
  • Kısa yürütme süresi . İşçileriniz web uygulaması iş parçacığı gibi saniyeler veya küçük dakikalar içinde dönerse, yeni bir işlem başlatmaya dahil olan ek yük, oranınızın daha yüksek olacağı anlamına gelir.

Küçük dakikalar? Birkaç dakika mı demek istiyorsun?
Ismael Miguel,

Hemen hemen. 1 ila 5 ya da öylesine. 18 çalışanı olan işçi başına 120 saniyede, her 7 saniyede bir yenisini teslim ediyorsunuz. Birçoğu bölgeyi önbelleğe almak için geliyor.
sysadmin1138

1
Anlamadın .. 2. noktasında "küçük dakikalar" diyorsun. Dakikalar her zaman 60 saniyelik aynı "büyüklüğe" sahiptir. Bazen 61 saniye.
Ismael Miguel,

4

% 100 hızında çalışan 36 çekirdeğin tümünü görmelisiniz - yazılımın bunu yapabileceğini varsayalım (ki önemsiz değildir - zamanlama bu kadar çok çekirdekli olabilir, bu nedenle% 100'ün altındaki düşüşler kabul edilebilir).

Açıkça görüldüğü üzere, hiper iş parçacıklı bir cevheri "böldüğünüzde",% 200'ünün anlamı "% 2x100" değildir - yapılan işte. Bu ne kadar iş yapıldığı işin ne olduğuna bağlıdır - hiper iş parçacığı olmayan işin 1,5 katının üstünde bir yerde çoğu zaman olması beklenir.


3

Hyperthreading'in uygulanma şekli, spesifik CPU girişi ile değişir. Nehalem'den Skylake'e kadar Intel, sabit oranda (yani: 50/50) boru hattının paylaşılan bölümlerini dinamik olarak paylaşılan yapılara doğru önemli ölçüde azalttı.

Neyse, genel anlamda, HT'nin etkinleştirilmesi, tek iş parçacıklı yürütme işleminin yavaş yavaş yavaşlamasına neden oldu, ancak Linux zamanlayıcısının nasıl çalıştığı nedeniyle, bu yalnızca sayı veya çalışan iş parçacığı fiziksel çekirdek sayısından daha yüksek olduğunda gerçekleşir. Bu gibi durumlarda (dişler> maçalar) tipik olarak maksimum öneme sahip toplam verime değer verirseniz, hyperthreading net bir kazanç olarak kalır.

Bu nasıl mümkün olabilir? Anlaşılması gereken nokta, CPU'nun fiziksel çekirdekleri ve sanal olanları eşit çekirdekler olarak sunmaması, ikincisini Linux zamanlayıcısının başka herhangi bir fiziksel çekirdek varsa bunları planlamaktan kaçınabileceği şekilde göstermesidir. Başka bir deyişle, önce tüm fiziksel çekirdekleri kullanır, sonra sanal olanı kullanmaya başlar.

Bu, genel olarak, HyperThreading'in çok değerli bir özellik (Power8 gibi diğer işlemciler daha derin SMT teknikleri kullandığından) ve performansı en üst düzeye çıkarmak için, CPU'yu sanal veya fiziksel çekirdek başına en az bir iş parçacığı ile yüklemek anlamına gelir. Pratik bir örnek olarak, 18 çekirdekli bir işlemciden tam performans elde etmek için en az 36 diş kullanmanız gerekir.

İki istisna vardır:

  1. İstediğiniz tek şey sınırlı bir dizi iş parçasındaki gecikmeyi en aza indirmekse (buradaki <fiziksel çekirdeğin iş parçacığı) HT'yi devre dışı bırakabilirsiniz
  2. çok eski CPU (Pentium4 ve çok daha küçük bir şekilde Nehalem), CPU'yu birçok ana kaynağı 50/50 oranında, ikinci iş parçacığının durumundan / yükünden bağımsız olarak ayırmaya zorlayan esnek olmayan bölüm kurallarına sahiptir. Bu durumda, eklenen verimin çok daha düşük tek diş performansına değdiğinden emin olmak için kullanım durumunuzu kıyaslamalısınız.
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.