CPU benzeşimi Linux'taki gruplarla nasıl etkileşir?


10

Ben izole CPU bir dizi çok iş parçacıklı kriterleri çalıştırmak için çalışıyorum. Uzun bir hikayeyi kısaltmak için, başlangıçta isolcpusve ile denedim taskset, ama sorunları vurdum . Şimdi cgroups / csets ile oynuyorum.

"Basit" cset shieldkullanım senaryosunun iyi çalışması gerektiğini düşünüyorum . Ben 4 çekirdek var, bu yüzden ben karşılaştırma için çekirdek 1-3 kullanmak istiyorum (Ben de bu çekirdek uyarlanabilir keneler modunda olacak şekilde yapılandırdım), sonra çekirdek 0 her şey için kullanılabilir.

Buradaki öğreticiyi izleyerek , bu kadar basit olmalıdır:

$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running

Şimdi izole edilmiş bir "kalkan" var (kullanıcı cset) ve çekirdek 0 her şey (sistem cset) içindir.

Tamam, şimdiye kadar iyi görünüyor. Şimdi bakalım htop. İşlemlerin tümü CPU 0'a geçirilmiş olmalıdır:

csets

Ha? İşlemlerin bazıları korumalı çekirdekler üzerinde çalışıyor olarak gösterilmiştir. Htop'un bir hataya sahip olduğunu göz ardı tasksetetmek için, kalkanda olduğu gösterilen bir işlemin afinite maskesini incelemek için kullanmayı denedim .

Belki bu görevler taşınamazdı? CPU3'te (kalkan içinde olması gerekir) çalışırken gösterilen rasgele bir işlemi kaldıralım htopve sistem grubunda aşağıdakilere göre görünüp görünmediğine bakalım cset:

$ cset shield -u -v | grep 864
   root       864     1 Soth [gmain]
   vext01    2412  2274 Soth grep 864 

Evet, buna göre sistem grubunda çalışıyor cset. Yani htopve csetkatılmıyorum.

Peki burada neler oluyor? Kime güveniyorum: cpu yakınlıkları ( htop/ taskset) veya cset?

csetBirlikte kullanmanız gerekmediği ve yakınlıkları olduğundan şüpheleniyorum . Belki de kalkan iyi çalışıyor ve yakınlık maskelerini ve htopçıktılarını görmezden gelmeliyim . Her iki durumda da, bunu kafa karıştırıcı buluyorum. Birisi biraz ışık tutabilir mi?


Hangi dağıtımı kullanıyorsunuz? OS ve sürüme bağlı olarak araçlar ve iş akışları farklı olduğu için soruyorum.
ewwhite

Bu bir debian 8 sistemi.
Edd Barrett

Tamam. Redhat dünyasında, yaptıklarınızı düzene sokmak numactliçin cgconfigve cgrules/ ve var cgred. Bunlar bazı çalışmalarla Debian için mevcut olabilir .
ewwhite

Yanıtlar:


5

Gönderen cpusets belgeler :

Sched_setaffinity çağrıları yalnızca o görevin cpuset'inde izin verilen CPU'lara göre filtrelenir.

Bu, CPU yakınlık maskelerinin, işlemin üyesi olduğu gruptaki cpus ile kesiştiği anlamına gelir.

Örneğin, bir işlemin afinite maskesi, çekirdekler {0, 1, 3} içeriyorsa ve işlem, {1, 2} çekirdekleri ile sınırlı olan sistem grubunda çalışıyorsa, işlem çekirdek 1 üzerinde çalışmaya zorlanacaktır.

Bunu% 99 eminim htopçıktı süreçleri cgroups yaratıldığından beri uyandı değil ve ekran gösteren gerçeğine "yanlış" olduğunu geçen çekirdeğini süreç ran.

Eğer kalkanımı yapmadan önce vim çalıştırırsam, vim iki kez çatallanır (herhangi bir nedenden dolayı) ve en derin çocuk çekirdek 2 üzerinde çalışıyorsa. Sanırım bu htopeski bilgileri gösteren hipotezi doğrular .

Ayrıca alanları inceleyebilir /proc/<pid>/statusve bunlara bakabilirsiniz cpus_allowed_*.

Örneğin console-kit-daemonburada çekirdek 3 üzerinde çalışan olarak htop içinde gösteren bir işlem (pid 857) var, ama içinde /proc/857/status:

Cpus_allowed:   1
Cpus_allowed_list:      0

Sanırım bu, afinite maskesinin 0x1 olduğunu söylüyor, bu da cgroups nedeniyle sadece çekirdek 1 üzerinde çalışmaya izin veriyor: yani kesişen ({0,1,2,3}, {0}) = {0}.

Eğer yapabilirsem, daha iyi bir cevap gelip gelmediğini görmek için soruyu bir süre açık bırakacağım.

@Davmac'a bu konuda yardım ettiği için teşekkürler (irc'de).


1
Haklısınız, HTOP'de gösterilen bilgi, sürecin şu anda hangi çekirdeği değil, planlandığı son çekirdek (aynı bilgi toplamak için aynı arayüzü kullanan her şey için de geçerlidir).
Austin Hemmelgarn
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.