TL; DR : Dari penelitian singkat, tampaknya ada kemungkinan untuk membatasi perintah pada jumlah inti tertentu, namun dalam semua kasus Anda harus menggunakan perintah yang benar-benar memberlakukan pembatasan.
cgroups
Linux memiliki cgroups
yang sering digunakan tepat untuk tujuan membatasi sumber daya yang tersedia untuk proses. Dari penelitian yang sangat singkat, Anda dapat menemukan contoh di Arch Wiki dengan konfigurasi Matlab (perangkat lunak ilmiah) yang diatur dalam /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;
}
}
Agar konfigurasi tersebut berlaku, Anda harus menjalankan proses melalui cgexec
perintah, misalnya dari halaman wiki yang sama:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
tasket
Sebuah pertanyaan terkait tentang Tanyakan pada Ubuntu dan Bagaimana cara membatasi proses untuk satu inti CPU di Linux? [duplikat] di situs Unix & Linux menunjukkan contoh penggunaan taskset
untuk membatasi CPU untuk proses. Pada pertanyaan pertama, itu dicapai melalui penguraian semua proses untuk pengguna tertentu
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
Dalam pertanyaan lain, proses dimulai dengan taskset
sendirinya:
$ taskset -c 0 mycommand --option # start a command with the given affinity
Kesimpulan
Meskipun dimungkinkan untuk membatasi proses, tampaknya tidak mudah untuk mencapai hal itu bagi pengguna tertentu. Contoh di posting Ask Ubuntu yang tertaut akan membutuhkan pemindaian yang konsisten untuk proses yang dimiliki oleh setiap pengguna dan digunakan taskset
pada setiap yang baru. Pendekatan yang jauh lebih masuk akal adalah dengan menjalankan aplikasi intensif CPU secara selektif, baik melalui cgexec
atau taskset
; tidak masuk akal untuk membatasi semua proses pada jumlah CPUS tertentu, terutama bagi mereka yang benar-benar memanfaatkan paralelisme dan konkurensi untuk menjalankan tugas mereka lebih cepat - membatasi mereka ke jumlah CPU tertentu dapat memiliki efek memperlambat pemrosesan. Selain itu, seperti jawaban terdon yang disebutkan itu adalah pemborosan sumber daya
Menjalankan aplikasi tertentu melalui taskset
atau cgexec
membutuhkan komunikasi dengan pengguna Anda untuk memberi tahu mereka aplikasi apa yang dapat mereka jalankan, atau membuat skrip wrapper yang akan meluncurkan aplikasi tertentu melalui tasksel
atau cgexec
.
Selain itu, pertimbangkan pengaturan jumlah proses yang dapat ditelurkan oleh pengguna atau grup alih-alih menetapkan batas jumlah CPU. Ini dapat dicapai melalui /etc/security/limits.conf
file .
Lihat juga