Apakah mungkin membatasi proses Linux sehingga hanya dapat berjalan pada inti tertentu pada mesin tertentu?

10

Katakanlah saya memiliki kotak quad-core dan empat proses identik, masing-masing dengan sepuluh utas. Apakah mungkin, di Linux, untuk mengatakan bahwa Proses A hanya diperbolehkan berjalan pada CPU 0, Proses B hanya diizinkan berjalan pada CPU 1, dll?

mikrofon
sumber

Jawaban:

16
taskset <affinity mask> -p <process>

yaitu

taskset 1 -p 12345

untuk mengatur proses 12345 menggunakan hanya prosesor / inti 1

Bitmask dapat berupa daftar (yaitu 1,3,4 untuk menggunakan core 1 3 dan 4 dari sistem inti 4+) atau bitmask dalam hex (0x0000000D the 1,3,4, 0x00000001 hanya untuk core 1)

tasksetbiasanya dalam paket yang disebut shedutils.

Sunting: hampir lupa ... Jika Anda ingin mengatur afinitas perintah baru alih-alih mengubahnya untuk proses yang ada, gunakan:

taskset <mask> <program> [<arg1>]...[<argN>]
David Spillett
sumber
1

penggunaan tasket (util-linux 2.13-pre7): tasket [options] [mask | daftar cpu] [pid | cmd [args ...]] mengatur atau mendapatkan afinitas suatu proses

-p, --pid beroperasi pada pid -c yang diberikan, tampilan -cpu-list yang ada dan tentukan CPU dalam format daftar -h, --help tampilkan bantuan ini -v, - informasi versi keluaran versi

Perilaku default adalah menjalankan perintah baru: tasket 03 sshd -b 1024 Anda dapat mengambil mask dari tugas yang ada: tasket -p 700 Atau mengaturnya: tasket -p 03 700 Format daftar menggunakan daftar yang dipisahkan koma alih-alih mask: tasket -pc 0,3,7-11 700 Ranges dalam format daftar dapat mengambil argumen langkah: misalnya 0-31: 2 setara dengan mask 0x55555555

Anda dapat selalu mengoptimalkan server Anda sesuai kebutuhan Anda

Rajat
sumber