ฉันจะตั้งค่าความสัมพันธ์ตัวประมวลผลของกระบวนการบน Linux ได้อย่างไร?
ฉันจะตั้งค่าความสัมพันธ์ตัวประมวลผลของกระบวนการบน Linux ได้อย่างไร?
คำตอบ:
ฉันได้ใช้ชุดงานสำหรับสิ่งนี้ หากคุณติดตั้งชุดงานไว้แล้วสิ่งที่ต้องการ:
taskset -c 1,3 -p 45678
จะตั้งค่ากระบวนการด้วย id 45678 เพื่อให้ความสัมพันธ์กับ cpus 1 และ 3
ภายในกระบวนการการโทรจะเป็นsched_setaffinity()
หรือสำหรับสิ่งที่ pthreadspthread_setaffinity_np()
ในบันทึกที่เกี่ยวข้องหากคุณกังวลเกี่ยวกับความเกี่ยวข้องของ CPU ในโปรแกรมของคุณคุณควรคำนึงถึงวิธีการจัดสรรหน่วยความจำด้วยเช่นกัน ระบบขนาดใหญ่ที่มีหน่วยความจำติดอยู่กับตัวควบคุมมากกว่าหนึ่งตัว (เช่นซ็อกเก็ต CPU หลายตัวแต่ละตัวมี) จะมีความหน่วงแฝงและแบนด์วิดท์ระหว่างคู่ของหน่วยความจำ CPU ที่แตกต่างกัน คุณจะต้องการค้นหา NUMA affinity เช่นกันโดยใช้numactl
คำสั่งหรือระบบจะเรียกมันว่าใช้งานได้ โปรแกรมหนึ่งที่ฉันทำงานได้เพิ่มประสิทธิภาพขึ้น 10% จากสิ่งนี้
คุณต้องติดตั้งschedutils
(โปรแกรมกำหนดเวลา Linux) ฉันใช้มันบน Ubuntu Desktop แล้ว
ลิงค์เอสเอฟ
taskset -c 1-3 ./a.out arg1 arg2
เรียกใช้a.out
กระบวนการโดยตั้งค่าอาร์กิวเมนต์และ affinity ที่กำหนดเป็นตัวประมวลผล 1, 2 หรือ 3 (อิงตามศูนย์)
นี่คือโปรแกรมการทดสอบ C ขั้นต่ำที่สามารถใช้ดูได้ในการทำงาน: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
taskset -p -c 1,3 45678
มากกว่าtaskset -c 1,3 -p 45678
; คือว่า-c 1,3
เป็นหน้ากากสเปคและเป็นเช่นนี้จะต้องวางอยู่ระหว่างและ-p
pid