มีการเผยแพร่ชุดแพทช์ที่เพิ่มความเร็วในการสร้างเคอร์เนล Linux 50-80%

Ingo Molnar ผู้พัฒนาเคอร์เนล Linux ที่มีชื่อเสียงและเป็นผู้เขียน CFS (Completely Fair Scheduler) ตัวกำหนดเวลางาน เสนอให้หารือเกี่ยวกับรายชื่อผู้รับจดหมายของนักพัฒนาเคอร์เนล Linux ชุดของแพตช์ที่ส่งผลต่อมากกว่าครึ่งหนึ่งของไฟล์ทั้งหมดในแหล่งที่มาของเคอร์เนลและ เพิ่มความเร็วของการสร้างเคอร์เนลใหม่ทั้งหมด 50-80% ขึ้นอยู่กับการตั้งค่า การเพิ่มประสิทธิภาพที่นำมาใช้นั้นน่าสังเกตว่ามีความเกี่ยวข้องกับการเพิ่มชุดการเปลี่ยนแปลงที่ใหญ่ที่สุดในประวัติศาสตร์ของการพัฒนาเคอร์เนล - มีการเสนอแพตช์ 2297 รายการเพื่อรวมในคราวเดียว โดยเปลี่ยนไฟล์มากกว่า 25 ไฟล์ (ไฟล์ส่วนหัว 10 ไฟล์ใน "รวม /” และ “arch/*/include/” ไดเรกทอรี "และ 15 ไฟล์พร้อมข้อความต้นฉบับ)

ประสิทธิภาพที่เพิ่มขึ้นสามารถทำได้โดยการเปลี่ยนวิธีการประมวลผลไฟล์ส่วนหัว มีข้อสังเกตว่ากว่าสามสิบปีของการพัฒนาเคอร์เนล สถานะของไฟล์ส่วนหัวมีลักษณะที่น่าหดหู่เนื่องจากมีการพึ่งพาข้ามกันจำนวนมากระหว่างไฟล์ การปรับโครงสร้างไฟล์ส่วนหัวใช้เวลานานกว่าหนึ่งปี และจำเป็นต้องมีการปรับปรุงลำดับชั้นและการขึ้นต่อกันใหม่อย่างมีนัยสำคัญ ในระหว่างการปรับโครงสร้างใหม่ มีการทำงานเพื่อแยกคำจำกัดความประเภทและ API สำหรับระบบย่อยเคอร์เนลที่แตกต่างกัน

ท่ามกลางการเปลี่ยนแปลงที่เกิดขึ้น: การแยกไฟล์ส่วนหัวระดับสูงออกจากกัน การกำจัดฟังก์ชันอินไลน์ที่เชื่อมโยงไฟล์ส่วนหัว การแยกไฟล์ส่วนหัวสำหรับประเภทและ API เพื่อให้แน่ใจว่าการประกอบไฟล์ส่วนหัวแยกกัน (ไฟล์ประมาณ 80 ไฟล์มีการพึ่งพาทางอ้อมที่รบกวนการประกอบ ซึ่งเปิดเผยผ่าน ไฟล์ส่วนหัวอื่นๆ), การเพิ่มการขึ้นต่อกันโดยอัตโนมัติให้กับไฟล์ “.h” และ “.c”, การปรับไฟล์ส่วนหัวให้เหมาะสมทีละขั้นตอน, การใช้โหมด “CONFIG_KALLSYMS_FAST=y”, การเลือกการรวมไฟล์ C ลงในบล็อกแอสเซมบลีเพื่อ ลดจำนวนไฟล์อ็อบเจ็กต์

ผลก็คือ งานที่ทำเสร็จแล้วทำให้สามารถลดขนาดไฟล์ส่วนหัวที่ประมวลผลในขั้นตอนหลังการประมวลผลลงได้ 1-2 ลำดับความสำคัญ ตัวอย่างเช่น ก่อนการปรับให้เหมาะสม การใช้ไฟล์ส่วนหัว “linux/gfp.h” ส่งผลให้มีโค้ดเพิ่ม 13543 บรรทัดและรวมไฟล์ส่วนหัวที่ต้องพึ่งพา 303 ไฟล์ และหลังจากการเพิ่มประสิทธิภาพ ขนาดก็ลดลงเหลือ 181 บรรทัดและ 26 ไฟล์ที่ต้องพึ่งพา หรืออีกตัวอย่างหนึ่ง: เมื่อประมวลผลไฟล์ “kernel/pid.c” ล่วงหน้าโดยไม่มีแพตช์ จะมีโค้ดรวมอยู่ถึง 94 บรรทัด ซึ่งส่วนใหญ่ไม่ได้ใช้ใน pid.c การแยกไฟล์ส่วนหัวทำให้สามารถลดจำนวนโค้ดที่ประมวลผลได้สามเท่า โดยลดจำนวนบรรทัดที่ประมวลผลลงเหลือ 36 บรรทัด

เมื่อเคอร์เนลถูกสร้างขึ้นใหม่ทั้งหมดด้วยคำสั่ง “make -j96 vmlinux” บนระบบทดสอบ การใช้งานแพตช์แสดงให้เห็นการลดเวลาการสร้างของสาขา v5.16-rc7 จาก 231.34 เป็น 129.97 วินาที (จาก 15.5 เป็น 27.7 บิวด์ ต่อชั่วโมง) และยังเพิ่มประสิทธิภาพในการใช้คอร์ CPU ในระหว่างการประกอบอีกด้วย ด้วยโครงสร้างที่เพิ่มขึ้น ผลของการปรับให้เหมาะสมจะยิ่งสังเกตเห็นได้ชัดเจนยิ่งขึ้น - เวลาในการสร้างเคอร์เนลใหม่หลังจากทำการเปลี่ยนแปลงไฟล์ส่วนหัวลดลงอย่างมาก (จาก 112% เป็น 173% ขึ้นอยู่กับไฟล์ส่วนหัวที่มีการเปลี่ยนแปลง) ขณะนี้การเพิ่มประสิทธิภาพมีเฉพาะสำหรับสถาปัตยกรรม ARM64, MIPS, Sparc และ x86 (32- และ 64- บิต) เท่านั้น

ที่มา: opennet.ru

เพิ่มความคิดเห็น