ฉันจะตั้งค่าความสัมพันธ์ตัวประมวลผลของกระบวนการบน Linux ได้อย่างไร?


29

ฉันจะตั้งค่าความสัมพันธ์ตัวประมวลผลของกระบวนการบน Linux ได้อย่างไร?

คำตอบ:


24

ฉันได้ใช้ชุดงานสำหรับสิ่งนี้ หากคุณติดตั้งชุดงานไว้แล้วสิ่งที่ต้องการ:

taskset -c 1,3 -p 45678

จะตั้งค่ากระบวนการด้วย id 45678 เพื่อให้ความสัมพันธ์กับ cpus 1 และ 3


1
แก้ไขที่ไม่ระบุชื่อบอกว่าคำสั่งจะต้องtaskset -p -c 1,3 45678มากกว่าtaskset -c 1,3 -p 45678; คือว่า-c 1,3เป็นหน้ากากสเปคและเป็นเช่นนี้จะต้องวางอยู่ระหว่างและ-p pid
G-Man กล่าวว่า 'Reinstate Monica'

7

ภายในกระบวนการการโทรจะเป็นsched_setaffinity()หรือสำหรับสิ่งที่ pthreadspthread_setaffinity_np()

ในบันทึกที่เกี่ยวข้องหากคุณกังวลเกี่ยวกับความเกี่ยวข้องของ CPU ในโปรแกรมของคุณคุณควรคำนึงถึงวิธีการจัดสรรหน่วยความจำด้วยเช่นกัน ระบบขนาดใหญ่ที่มีหน่วยความจำติดอยู่กับตัวควบคุมมากกว่าหนึ่งตัว (เช่นซ็อกเก็ต CPU หลายตัวแต่ละตัวมี) จะมีความหน่วงแฝงและแบนด์วิดท์ระหว่างคู่ของหน่วยความจำ CPU ที่แตกต่างกัน คุณจะต้องการค้นหา NUMA affinity เช่นกันโดยใช้numactlคำสั่งหรือระบบจะเรียกมันว่าใช้งานได้ โปรแกรมหนึ่งที่ฉันทำงานได้เพิ่มประสิทธิภาพขึ้น 10% จากสิ่งนี้



1
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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.