(4 jawaban)
Tutup 3 tahun lalu.
Bagaimana cara membatasi proses ke satu inti cpu?
Sesuatu yang mirip dengan ulimit
atau cpulimit
akan menyenangkan. (Hanya untuk memastikan:Saya TIDAK ingin membatasi persentase penggunaan atau waktu eksekusi. Saya ingin memaksa aplikasi (dengan semua turunannya, proses (utas)) untuk menggunakan satu inti cpu (atau 'n' inti cpu)).
Jawaban yang Diterima:
Di Linux, jalankan sched_setaffinity
panggilan sistem. Afinitas suatu proses adalah kumpulan prosesor yang dapat menjalankannya. Ada pembungkus shell standar:taskset
. Misalnya, untuk menyematkan proses ke CPU #0 (Anda harus memilih CPU tertentu):
taskset -c 0 mycommand --option # start a command with the given affinity
taskset -c -pa 0 1234 # set the affinity of a running process
Ada modul pihak ketiga untuk kedua Perl (Sys::CpuAffinity
) dan Python (affinity
) untuk mengatur afinitas proses. Keduanya berfungsi di Linux dan Windows (Windows mungkin memerlukan modul pihak ketiga lainnya dengan Sys::CpuAffinity
); Sys::CpuAffinity
juga berfungsi pada beberapa varian unix lainnya.
Jika Anda ingin menyetel afinitas proses dari saat kelahirannya, setel afinitas proses saat ini segera sebelum memanggil execve
. Berikut ini pembungkus sepele yang memaksa proses untuk dieksekusi pada CPU 0.
#!/usr/bin/env perl
use POSIX;
use Sys::CPUAffinity;
Sys::CpuAffinity::setAffinity(getpid(), [0]);
exec $ARGV[0] @ARGV