Di linux, panggilan sistem untuk mengatur afinitas CPU untuk suatu proses adalah sched_setaffinity
. Lalu ada taskset
alat untuk melakukannya di baris perintah.
Agar program tunggal itu berjalan hanya pada satu CPU, saya pikir Anda ingin sesuatu seperti
taskset -c 1 ./myprogram
(setel nomor CPU apa pun sebagai argumen ke -c
sakelar.)
Itu harus cukup dekat dengan sistem prosesor tunggal, selama proses Anda yang lain tidak berjalan terlalu banyak dibandingkan dengan yang ingin Anda ukur, atau mereka dijadwalkan untuk CPU lain. Jika Anda ingin mendedikasikan satu CPU untuk proses tunggal itu saja , dan mencegah proses lain dari berjalan pada CPU itu, Anda perlu mengatur afinitas mereka juga.
Itu, saya tidak tahu bagaimana melakukannya dengan benar. Anda harus mengatur afinitas prosesor init
sejak awal dalam proses boot untuk memastikan itu diwarisi untuk semua proses pada sistem. Sebagai solusinya, Anda bisa menggunakan taskset -c -p 0 $PID
untuk semua proses lain untuk memaksa mereka berjalan pada CPU # 0 saja.
systemd juga memilikiCPUAffinity=
untuk mengontrol afinitas dalam file Unit dan ada beberapa dari pertanyaan tentang pengaturan afinitas bawaan di sini di unix.SE, tapi saya tidak menemukan apapun dengan solusi yang baik.
Meskipun ketika @Kamil Maciorowski berkomentar dan menjawab pertanyaan lain di superuser.com , pengaturan isolcpus=1
pada baris perintah kernel harus "mengisolasi CPU dari algoritma penjadwalan umum", yang merupakan sesuatu yang mungkin Anda inginkan.