ฉันพยายามเรียกใช้การวัดแบบหลายเธรดในชุดของซีพียูแบบแยกตัว ตัดเรื่องยาวสั้นผมเริ่มพยายามกับisolcpus
และtaskset
แต่ตีปัญหา ตอนนี้ฉันกำลังเล่นกับ cgroups / csets
ฉันคิดว่ากรณีการใช้ "แบบง่าย" cset shield
ควรใช้งานได้ดี ฉันมี 4 คอร์ดังนั้นฉันจึงต้องการใช้คอร์ 1-3 สำหรับการเปรียบเทียบ (ฉันได้กำหนดค่าแกนเหล่านี้ให้อยู่ในโหมดติ๊กปรับตัว) แล้วแกน 0 สามารถใช้กับทุกสิ่งอื่นได้
ต่อไปนี้การสอนที่นี่มันควรจะง่ายเหมือน:
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
ดังนั้นตอนนี้เรามี "shield" ซึ่งแยกได้ (user cset) และ core 0 สำหรับทุกอย่าง (system cset)
เอาล่ะดูดีมาก htop
ตอนนี้ให้ดูที่ กระบวนการทั้งหมดควรย้ายไปยัง CPU 0:
ฮะ? กระบวนการบางอย่างจะแสดงเป็นทำงานบนแกนป้องกัน ในการแยกแยะกรณีที่ฮ็อพมีข้อผิดพลาดฉันก็ลองใช้taskset
เพื่อตรวจสอบความสัมพันธ์ของรูปแบบที่แสดงว่าอยู่ในโล่
บางทีงานเหล่านั้นอาจไม่สามารถเคลื่อนย้ายได้ ลองถอนกระบวนการโดยพลการแสดงว่าทำงานบน CPU3 (ซึ่งควรอยู่ใน shield) ในhtop
และดูว่ามันจะปรากฏใน cgroup ระบบตามcset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
อ๋อที่ทำงานบนระบบ cgroup cset
ตาม ดังนั้นhtop
และcset
ไม่เห็นด้วย
แล้วเกิดอะไรขึ้นที่นี่? ใครที่ฉันสามารถไว้วางใจ: ซีพียูชอบพอ ( htop
/ taskset
) หรือcset
?
ฉันสงสัยว่าคุณไม่ควรใช้cset
และชอบใจกัน บางทีโล่ทำงานได้ดีและฉันควรละเว้นมาสก์ความสัมพันธ์และhtop
ผลลัพธ์ ฉันพบความสับสนนี้ ใครบางคนสามารถส่องแสงบ้างไหม?
numactl
และcgconfig
และcgrules
/ cgred
เพื่อปรับปรุงสิ่งที่คุณทำ สิ่งเหล่านี้อาจใช้ได้สำหรับ Debian ที่มีงานบางอย่าง