จุดหมายปลายทางของการรองรับ preemption แบบเรียลไทม์บน Linux
- งานเพิ่มการรองรับแบบเรียลไทม์ให้กับ Linux เริ่มต้นมาตั้งแต่ปี 2004 และตอนนี้ได้เข้าสู่ช่วงเกือบเสร็จสมบูรณ์แล้ว
- เป้าหมายของ preemption แบบเรียลไทม์คือทำให้โปรเซสที่มีลำดับความสำคัญสูงสุดสามารถทำงานได้ด้วยความหน่วงต่ำที่สุดเท่าที่จะเป็นไปได้ และเพื่อสิ่งนี้ เคอร์เนลจึงถูกทำให้สามารถถูก preempt ได้ในสถานการณ์ให้ได้มากที่สุด
- งานนี้ส่งผลให้เกิดการเขียนส่วนแกนหลักของเคอร์เนลขึ้นใหม่ และมอบประโยชน์ที่ไปไกลกว่ากรณีใช้งานแบบเรียลไทม์
การแก้ปัญหา printk()
- ฟังก์ชัน
printk() ที่ใช้ส่งข้อความไปยัง system console และ log ในเคอร์เนลทำงานแบบ synchronous จึงจะไม่คืนค่ากลับจนกว่าข้อความจะถูกส่งไปยังปลายทางที่ตั้งค่าไว้ทั้งหมด
- นักพัฒนาเรียลไทม์ได้ย้ายเอาต์พุตของ
printk() ไปไว้ในเธรดแยกเพื่อทำให้เป็นแบบ asynchronous แต่สิ่งนี้เป็นเพียงแนวทางแก้ชั่วคราว
- ปัญหา
printk() ซึ่งเริ่มมีการทำงานอย่างจริงจังตั้งแต่ปี 2018 กำลังถูกแก้ไขผ่านแพตช์ราว 300 ชุด และยังคงเหลือปัญหาซับซ้อนอีกเล็กน้อยที่ต้องจัดการ
แนวโน้มการรวมโค้ด preemption แบบเรียลไทม์เข้าสู่ mainline
- มีการแสดงความหวังว่าส่วนที่เหลือของโค้ด preemption แบบเรียลไทม์จะถูกรวมเข้าสู่ mainline ก่อนครบรอบ 20 ปีในช่วงปลายปี 2024
- แม้จะยังไม่มีความเปลี่ยนแปลงล่าสุดในโค้ด
printk() แต่โค้ด handover ได้ถูกปรับเพื่อให้สามารถอัปเดต console driver ได้ทีละตัว
- โค้ดถูกเปลี่ยนให้ข้อความสำคัญถูกคัดลอกเข้าสู่ message buffer อย่างสมบูรณ์ก่อนที่บรรทัดแรกจะถูกพิมพ์ออกมา และเพื่อป้องกันระบบล่มจาก console driver ที่มีปัญหา จึงมีการบันทึกข้อความลงใน safe console ก่อน
ความเห็นของ GN⁺
- งานเพิ่มการรองรับ preemption แบบเรียลไทม์ให้กับ Linux kernel ใกล้เสร็จสมบูรณ์แล้ว และจะมอบประโยชน์อย่างมากแก่ระบบที่ต้องการงานแบบเรียลไทม์
- การทำให้ฟังก์ชัน
printk() เป็น asynchronous มีบทบาทสำคัญต่อการเพิ่มการตอบสนองของระบบและการบรรลุเป้าหมายของ preemption แบบเรียลไทม์
- บทความนี้แสดงให้เห็นถึงความก้าวหน้าสำคัญของการพัฒนา Linux kernel และนำเสนอเนื้อหาที่น่าสนใจสำหรับผู้ที่สนใจการพัฒนาเคอร์เนล
1 ความคิดเห็น
ความเห็นจาก Hacker News
ข้อดีของไมโครเคอร์เนล QNX
ปัญหาของการประมวลผลแบบเรียลไทม์ใน Linux
ฟังก์ชันการล็อกของเคอร์เนลและกรณีใช้งานจริง
ความเป็นไปได้ในการแทนที่ชุดฮาร์ดแวร์/ซอฟต์แวร์เรียลไทม์
การแยกความต่างระหว่างแอปพลิเคชันเรียลไทม์แบบ "hard" กับ "soft"
การประมวลผลแบบเรียลไทม์ของเคอร์เนล Linux และข้อจำกัดของฮาร์ดแวร์
ปัญหาของ synchronous logging
วิธีรับประกันการตอบสนองของโปรเซสเฉพาะ
ความสามารถ real-time preemption ของ Linux และประสบการณ์ในอดีต
ผลกระทบต่อผู้ใช้ทั่วไป