Thomas Gleixner จาก Linutronix ซึ่ง Intel ซื้อกิจการเมื่อปีที่แล้ว และทีมของเขากำลังทำงานเพื่อล้างกระบวนการบูต Linux x86/x86_64 ชุดของแพตช์ 17 รายการที่สัมผัสกับโค้ดเริ่มต้นของเคอร์เนล Linux รุ่นแรกและการเปลี่ยนแปลงอื่นๆ ทั่วแผนผังได้ถูกโพสต์เพื่อการสนทนาแล้ว

นักพัฒนาเคอร์เนล Linux กำลังดำเนินการทำความสะอาดกระบวนการบู๊ต x86 และทำความสะอาดโค้ด Thomas Gleixner อธิบายเกี่ยวกับรหัสบูท x86 ของ Linux ในปัจจุบันและจุดเน้นของชุดแพตช์ใหม่ล่าสุดนี้:

“ทีมของผมและตัวผมเองกำลังดำเนินการทำความสะอาดกระบวนการบูท x86 โดยเฉพาะอย่างยิ่งการแสดง CPUID ที่น่ากลัวทั้งหมด การประเมินซึ่งสร้างด้วยวงจรลวดแห้ง เทปพันสายไฟ และกาวติดแน่น

เป้าหมายที่เกี่ยวข้องคือการย้ายการเริ่มต้นของโครงสร้างพื้นฐานที่ไม่จำเป็นระหว่างการบู๊ตก่อนกำหนดไปยังขั้นตอนต่อมาของกระบวนการบู๊ต การบู๊ตก่อนกำหนดนั้นเปราะบาง และซับซ้อนพอแล้ว ดังนั้น อะไรก็ตามที่สามารถก้าวไปสู่ช่วงหลังได้ถือว่าชนะ

การเริ่มต้น X86 FPU เป็นหนึ่งในส่วนที่เห็นได้ชัดซึ่งไม่มีเหตุผลอะไรที่ต้องทำก่อนกำหนด ข้อกำหนดเพียงอย่างเดียวคือให้มันเกิดขึ้น ก่อนการแพตช์ทางเลือก การทำในช่วงแรกยังต้องมีการแยกวิเคราะห์บรรทัดคำสั่งแบบกำหนดเองซึ่งสามารถหลีกเลี่ยงได้อย่างชัดเจนเมื่อการเริ่มต้นเกิดขึ้นในภายหลัง

การแพตช์ทางเลือกเกิดขึ้นจาก check_bugs() ซึ่งเรียกใช้ในช่วงท้ายของ start_kernel() การย้ายการเริ่มต้น FPU นั้นสายเกินไปเพราะมีการเรียกใช้ check_bugs() หลังจาก fork_init() แต่ fork_init() ต้องการให้เริ่มต้น FPU บน X86 เช่นเดียวกับ X86 ขนาดของ task_struct ขึ้นอยู่กับขนาดบัฟเฟอร์การลงทะเบียน FPU

เพื่อหลีกเลี่ยงฟังก์ชันเวทย์มนตร์อื่น เราได้กำหนดให้ย้าย check_bugs() ก่อนหน้านี้และตรวจสอบอวตารทั้งหมดว่ามีเหตุผลใดที่ต้องทำเช่นนั้นช้า ปรากฎว่าไม่มี (คำสุดท้ายที่มีชื่อเสียง) แต่ยังเปิดเผยว่า check_bugs() เป็นคำเรียกชื่อผิดอย่างร้ายแรง

check_bugs() กลายเป็นแหล่งทิ้งสำหรับการสิ้นสุดการกำหนดค่าเริ่มต้นของ CPU ก่อนที่จะเรียกใช้โค้ดเริ่มต้นที่เหลือ”

ชุดแพตช์นี้ เริ่มต้นที่ 17 แพตช์โดยมีจุดประสงค์เพื่อล้างรหัสบูท Linux x86 เป็นความพยายามที่ดีและติดตามผลงานล่าสุดของ Gleixner เกี่ยวกับ CPU แบบขนาน รองรับการเรียกใช้งานสำหรับ Linux 6.5 เป็นการปรับปรุงการบูตอื่น

Categories: IT Info