Trên linux, lệnh gọi hệ thống để đặt ái lực CPU cho một tiến trình là sched_setaffinity
. Sau đó, có taskset
công cụ để làm điều đó trên dòng lệnh.
Để chương trình duy nhất đó chỉ chạy trên một CPU, tôi nghĩ bạn muốn một cái gì đó như
taskset -c 1 ./myprogram
(đặt bất kỳ số CPU nào làm đối số cho công -c
tắc.)
Nó phải đủ gần với một hệ thống xử lý đơn, miễn là các quy trình khác của bạn không chạy quá nhiều so với hệ thống bạn muốn đo hoặc chúng được lên lịch cho các CPU khác. Nếu bạn chỉ muốn dành một CPU cho quy trình duy nhất đó và ngăn các quy trình khác chạy trên CPU đó, bạn cũng cần đặt mối quan hệ của chúng.
Điều đó, tôi không biết làm thế nào cho đúng. Bạn cần đặt mối quan hệ của bộ xử lý từ init
rất sớm trong quá trình khởi động để đảm bảo nó được kế thừa cho tất cả các quy trình trên hệ thống. Như một giải pháp thay thế, bạn có thể sử dụng taskset -c -p 0 $PID
cho tất cả các quy trình khác để buộc chúng chỉ chạy trên CPU # 0.
systemd cũngCPUAffinity=
phải kiểm soát mối quan hệ trong các tệp đơn vị và có một số câu hỏi về việc đặt mối quan hệ mặc định ở đây trên unix.SE, nhưng tôi không tìm thấy bất kỳ giải pháp nào tốt.
Mặc dù như @Kamil Maciorowski nhận xét và trả lời cho một câu hỏi về superuser.com , thiết lập isolcpus=1
trên dòng lệnh hạt nhân nên "cô lập CPU mà từ các thuật toán lập lịch trình chung", mà là một cái gì đó bạn có thể muốn.