Linux วางลงในเคอร์เนลบนคอร์ทั้งหมดหรือไม่

สำหรับคอมพิวเตอร์แบบมัลติคอร์ที่ใช้ Linux 2.6.x จะเกิดอะไรขึ้นเมื่อเธรดทำการเรียกระบบ มันดรอปลงในเคอร์เนลเฉพาะบนคอร์ที่เธรดกำลังทำงานอยู่หรือไม่หรือหล่นลงในเคอร์เนลบนคอร์ทั้งหมด (ขออภัยหากนี่เป็นคำถามมือใหม่)

พฤติกรรมนี้ (ขึ้นอยู่กับว่าสิ่งไหนถูกต้อง) จะเหมือนกันเมื่อได้รับการขัดจังหวะโดยทั่วไปหรือไม่ ถ้าไม่มีความแตกต่างคืออะไร?


person user249060    schedule 12.01.2010    source แหล่งที่มา


คำตอบ (2)


เฉพาะเธรดที่เรียกใช้ syscall เท่านั้นที่จะเข้าสู่เคอร์เนล การกำหนดเวลาทั้งหมดใน Linux เสร็จสิ้นบนความละเอียดของเธรด สำหรับการขัดจังหวะ - พวกมันถูกส่งไปยังคอร์เดียว กล่าวคือ มีโปรเซสเซอร์เพียงตัวเดียวเท่านั้นที่ถูกขัดจังหวะสำหรับแต่ละเหตุการณ์ฮาร์ดแวร์ที่กำหนด จากนั้นสามารถกำหนดอินเทอร์รัปต์ให้กับคอร์เฉพาะได้ด้วยตนเอง ทำได้โดยใช้มาสก์ใน /proc/irq/IRQ-NUMBER/smp_affinity คุณสามารถดูว่า CPU ตัวใดได้รับการขัดจังหวะด้วยฮาร์ดแวร์ใดบ้างใน /proc/interrupts

person Nikolai Fetissov    schedule 12.01.2010

มีคอร์เดียวเท่านั้นที่จัดการการเรียกของระบบ และมีเพียงคอร์เดียวเท่านั้นที่จัดการการขัดจังหวะ

ฉันไม่มีข้อมูลอ้างอิงใด ๆ เกี่ยวกับวิธีการกำหนดเส้นทางการขัดจังหวะ - บางที คู่มือการเขียนโปรแกรมระบบของ Intel จะเป็นประโยชน์ที่นี่

แต่ลองจินตนาการดูว่าคอร์ทั้งหมดถูกขัดจังหวะโดยการเรียกหรือขัดจังหวะของระบบทุกครั้งหรือไม่ Linux ได้รับการออกแบบมาเพื่อปรับขนาดได้หลายคอร์ สิ่งนี้จะทำลายความสามารถในการปรับขนาดนั้น - บนเซิร์ฟเวอร์ขนาดใหญ่ทุกดิสก์ I/O การขัดจังหวะตัวจับเวลา ฯลฯ จะหยุดทุกคอร์ในระบบอย่างมีประสิทธิภาพ ป้องกันไม่ให้ทำงานที่เป็นประโยชน์

person Michael    schedule 12.01.2010