(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