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 isolcpus
ve ile denedim taskset
, ama sorunları vurdum . Şimdi cgroups / csets ile oynuyorum.
"Basit" cset shield
kullanı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:
Ha? İşlemlerin bazıları korumalı çekirdekler üzerinde çalışıyor olarak gösterilmiştir. Htop'un bir hataya sahip olduğunu göz ardı taskset
etmek 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 htop
ve 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 htop
ve cset
katılmıyorum.
Peki burada neler oluyor? Kime güveniyorum: cpu yakınlıkları ( htop
/ taskset
) veya cset
?
cset
Birlikte 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?
numactl
için cgconfig
ve cgrules
/ ve var cgred
. Bunlar bazı çalışmalarla Debian için mevcut olabilir .