เพื่อนำหน้าฉันใช้ Debian Wheezy พร้อมเคอร์เนล 3.2 บนชิปเซ็ต AMD64 เครื่องของฉันมีสองแกน Xeon E5-2690 ฉันตั้งค่าพารามิเตอร์การบู๊ตเพื่อให้แกนประมวลผลทั้งหมดใน CPU ตัวเดียวทุ่มเทให้กับกระบวนการเดียว เมื่อต้องการทำสิ่งนี้ฉันได้ตั้ง isolcpus = 8,9,10,11,12,13,14,15 ในด้วง
จนถึงตอนนี้ดีมาก ตอนนี้สมมติว่าฉันต้องการใช้ซีพียูแบบแยกสำหรับคำสั่งที่กำหนดให้เป็นแบบง่ายฉันจะใช้ลูปไม่ จำกัด แบบง่าย:
$ tasket -c 8-15 bash -c 'โดยจริง; ทำเสียงสะท้อนสวัสดี> / dev / null; เสร็จแล้ว &
จนถึงตอนนี้ยอดเยี่ยมแสดงให้เห็นว่าคอร์ 8 หมุนถึงการใช้ประโยชน์เกือบ 100% ตอนนี้สมมติว่าฉันเปิดใช้คำสั่งนั้นอีกครั้ง:
$ tasket -c 8-15 bash -c 'โดยจริง; ทำเสียงสะท้อนสวัสดี> / dev / null; เสร็จแล้ว &
ตอนนี้แสดงให้เห็นว่าด้านบนแกน 9-15 ยังคงว่างและทั้งสองกระบวนการแบ่งปันแกน 8 ถ้าฉันทำเช่นนี้:
$ tasket -c 8 bash -c 'โดยจริง; ทำเสียงสะท้อนสวัสดี> / dev / null; เสร็จแล้ว &
$ tasket -c 9 bash -c 'โดยจริง; ทำเสียงสะท้อนสวัสดี> / dev / null; เสร็จแล้ว &
Cores 8 และ 9 แต่ละคนจะได้รับการใช้ประโยชน์ 100% เท่าที่ควร สิ่งนี้ใช้ได้กับไอโซคอร์ปัสเท่านั้นเพราะชุดงานเดียวกันกับแกน 1-7 จะแพร่กระจายกระบวนการอย่างทั่วถึงในแกนที่เกี่ยวข้อง นอกจากนี้ "tasket -p" ยังแสดงให้เห็นว่ามาสก์ความสัมพันธ์สำหรับกระบวนการ 8-15 ถูกตั้งค่าอย่างถูกต้อง ดูเหมือนว่าตัวกำหนดตารางเวลาเคอร์เนลปฏิเสธที่จะใช้สิ่งใดนอกจากแกนกลางที่น้อยที่สุดที่ระบุไว้ในมาสก์ affinity
ปกติแล้วตอนนี้สิ่งนี้จะไม่เป็นเรื่องใหญ่สำหรับตัวอย่างด้านบนของฉันเพียงระบุคอร์แต่ละคอร์สำหรับแต่ละกระบวนการ อย่างไรก็ตามฉันต้องการเรียกใช้แอพพลิเคชั่นแบบมัลติเธรดสูงบน CPU เฉพาะ ฉันต้องการระบุชุดคอร์และให้เธรดพูลใช้โดยอัตโนมัติโดยไม่ต้องรีเซ็ตความสัมพันธ์ของตัวประมวลผลแต่ละเธรดสำหรับแต่ละเธรดที่วางไข่
ไม่มีใครมีความคิดใด ๆ ที่จะได้รับตารางเวลาเพื่อให้ฉันมากกว่าหนึ่งแกนจากชุด isolcpu หรือไม่?