TL; DR : Kısa bir araştırmadan, komutları belirli sayıda çekirdekle sınırlamak mümkün görünmektedir, ancak her durumda, kısıtlamayı gerçekten zorlayan bir komut kullanmanız gerekir.
cgroups
Linux, cgroups
süreçler için mevcut kaynakları kısıtlamak amacıyla sıklıkla kullanılan bir Linux yazılımına sahiptir. Çok kısa bir araştırmadan, Arch Wiki'de Matlab (bilimsel bir yazılım) yapılandırmasında bir örnek bulabilirsiniz /etc/cgconfig.conf
:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
Bu tür bir yapılandırmanın geçerli olması için işlemi cgexec
komutla, örneğin aynı wiki sayfasından çalıştırmanız gerekir:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
taskset
Bir ilgili soru Ubuntu ve Ask üzerinde nasıl Linux bir işlemci çekirdeğine bir süreç sınırlamak için? Unix ve Linux sitesindeki [yinelenen]taskset
işlem için CPU'ları sınırlamak için bir örnek gösterir . İlk soruda, belirli bir kullanıcı için tüm süreçlerin ayrıştırılmasıyla elde edilir
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Diğer soruda, taskset
kendi kendine bir süreç başlatılır :
$ taskset -c 0 mycommand --option # start a command with the given affinity
Sonuç
Süreçleri sınırlamak kesinlikle mümkün olsa da, belirli kullanıcılar için bunu başarmak o kadar kolay değil gibi görünüyor. Bağlantılı Ask Ubuntu gönderisindeki örnek, her bir kullanıcıya ait işlemler ve her biri için kullanılan işlemler için tutarlı tarama gerektirir taskset
. Çok daha makul bir yaklaşım CPU yoğun uygulamalarını seçici olarak cgexec
veya yoluyla çalıştırmak olacaktır taskset
; ayrıca tüm süreçleri belirli sayıda CPUS ile sınırlamak da anlamsızdır, özellikle de görevlerini daha hızlı yürütmek için paralellik ve eşzamanlılıktan faydalananlar için - bunları belirli sayıda CPU ile sınırlamak, işlemi yavaşlatma etkisine sahip olabilir. Buna ek olarak, terdon'un cevabının da belirttiği gibi, bu bir kaynak israfı
Belirli uygulamaları çalıştırarak taskset
veya cgexec
hangi uygulamaları çalıştırabileceklerini bildirmek için kullanıcılarınızla iletişim kurmanızı veya seçili uygulamaları tasksel
veya aracılığıyla başlatacak sarıcı komut dosyaları oluşturmanızı gerektirir cgexec
.
Ayrıca, CPU sayısı için sınır belirlemek yerine, bir kullanıcının veya grubun oluşturabileceği işlem sayısını ayarlamayı düşünün. Bu, /etc/security/limits.conf
dosya ile sağlanabilir .
Ayrıca bakınız