บน Linux, สายระบบในการตั้งค่าความสัมพันธ์ของ CPU sched_setaffinity
สำหรับกระบวนการคือ จากนั้นมีtaskset
เครื่องมือสำหรับทำบนบรรทัดคำสั่ง
หากต้องการให้โปรแกรมเดียวทำงานบน CPU เพียงเครื่องเดียวฉันคิดว่าคุณต้องการอะไร
taskset -c 1 ./myprogram
(ตั้งค่าหมายเลข CPU ใด ๆ เป็นอาร์กิวเมนต์เป็น-c
สวิตช์)
ซึ่งควรใกล้เคียงกับระบบตัวประมวลผลเดียวตราบใดที่กระบวนการอื่นของคุณไม่ได้ทำงานมากเกินไปเมื่อเทียบกับกระบวนการที่คุณต้องการวัด หากคุณต้องการอุทิศ CPU หนึ่งตัวให้กับกระบวนการเดียวเท่านั้นและป้องกันไม่ให้กระบวนการอื่นทำงานบน CPU นั้นคุณจะต้องตั้งค่าความสัมพันธ์ของพวกเขาด้วย
นั้นผมไม่ทราบวิธีการทำอย่างถูกต้อง คุณต้องตั้งค่าความสัมพันธ์ของตัวประมวลผลinit
ตั้งแต่ต้นในกระบวนการบู๊ตเพื่อให้แน่ใจว่าได้รับการสืบทอดไปยังกระบวนการทั้งหมดในระบบ คุณสามารถใช้taskset -c -p 0 $PID
สำหรับกระบวนการอื่น ๆ ทั้งหมดเพื่อบังคับให้พวกเขาทำงานบน CPU # 0 เท่านั้น
systemd นอกจากนี้ยังมีCPUAffinity=
การควบคุมความสัมพันธ์ในแฟ้มหน่วยและมีคู่ของคำถามเกี่ยวกับการตั้งค่าเริ่มต้นความสัมพันธ์ที่นี่ใน unix.SE แต่ฉันไม่พบใด ๆ กับเป็นทางออกที่ดี
แม้ว่า@Kamil Maciorowski แสดงความคิดเห็นและตอบคำถามอื่นใน superuser.comการตั้งค่าisolcpus=1
บนบรรทัดคำสั่งเคอร์เนลควร "แยก CPU นั้นออกจากอัลกอริทึมการตั้งเวลาทั่วไป" ซึ่งเป็นสิ่งที่คุณอาจต้องการ