ตัวสร้างแม่พิมพ์รุ่นแรกที่พัฒนาโดย LLVM lld

Rui Ueyama ผู้เขียน LLVM lld linker และคอมไพเลอร์ chibicc นำเสนอ Mold linker ประสิทธิภาพสูงรุ่นใหม่ที่เสถียรรุ่นแรก ซึ่งเร็วกว่า GNU gold และ LLVM lld linkers อย่างเห็นได้ชัดในเรื่องความเร็วในการลิงก์ไฟล์อ็อบเจ็กต์ โปรเจ็กต์นี้ถือว่าพร้อมสำหรับการใช้งานจริง และสามารถใช้เป็นตัวทดแทน GNU Linker บนระบบ Linux ที่รวดเร็วและโปร่งใสได้ แผนสำหรับการเปิดตัวครั้งใหญ่ครั้งถัดไปนั้นรวมถึงการรองรับแพลตฟอร์ม macOS ให้เสร็จสิ้น หลังจากนั้นงานจะเริ่มในการปรับ Mold สำหรับ Windows

Mold เขียนด้วยภาษา C++ (C++20) และได้รับอนุญาตภายใต้ AGPLv3 ซึ่งเข้ากันได้กับ GPLv3 แต่เข้ากันไม่ได้กับ GPLv2 เนื่องจากต้องมีการเปลี่ยนแปลงแบบเปิดเมื่อพัฒนาบริการเครือข่าย ตัวเลือกนี้อธิบายได้จากความปรารถนาที่จะได้รับเงินทุนเพื่อการพัฒนา - ผู้เขียนยินดีที่จะขายสิทธิ์ในรหัสสำหรับการออกใบอนุญาตใหม่ภายใต้ใบอนุญาตที่อนุญาต เช่น MIT หรือจัดเตรียมใบอนุญาตเชิงพาณิชย์แยกต่างหากสำหรับผู้ที่ไม่พอใจกับ AGPL

Mold รองรับคุณสมบัติทั้งหมดของ GNU linker และมีประสิทธิภาพสูงมาก - การลิงก์ทำได้ที่ความเร็วเพียงครึ่งเดียวของการคัดลอกไฟล์ด้วยยูทิลิตี้ cp ตัวอย่างเช่น เมื่อสร้าง Chrome 96 (ขนาดโค้ด 1.89 GB) จะใช้เวลา 8 วินาทีในการเชื่อมโยงไฟล์ปฏิบัติการกับ debuginfo บนคอมพิวเตอร์ 53 คอร์โดยใช้ GNU gold, LLVM lld - 11.7 วินาที และ Mold เพียง 2.2 วินาที (เร็วกว่า 26 เท่า กนูโกลด์) เมื่อเชื่อมโยง Clang 13 (3.18 GB) จะใช้เวลา 64 วินาทีใน GNU gold, 5.8 วินาทีใน LLVM lld และ 2.9 วินาทีใน Mold เมื่อสร้าง Firefox 89 (1.64 GB) ใช้เวลา 32.9 วินาทีใน GNU gold, 6.8 วินาทีใน LLVM lld และ 1.4 วินาทีใน Mold

ตัวสร้างแม่พิมพ์รุ่นแรกที่พัฒนาโดย LLVM lld

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

ประสิทธิภาพสูงในการเชื่อมโยงไฟล์ปฏิบัติการจากไฟล์อ็อบเจ็กต์ที่เตรียมคอมไพเลอร์จำนวนมากใน Mold ทำได้โดยใช้อัลกอริธึมที่เร็วขึ้น การดำเนินการแบบขนานที่ใช้งานระหว่างคอร์ CPU ที่มีอยู่ และการใช้โครงสร้างข้อมูลที่มีประสิทธิภาพมากขึ้น ตัวอย่างเช่น Mold ใช้เทคนิคในการคำนวณแบบเข้มข้นในขณะที่คัดลอกไฟล์ โหลดไฟล์อ็อบเจ็กต์ล่วงหน้าลงในหน่วยความจำ ใช้ตารางแฮชด่วนสำหรับการแก้ไขอักขระ การสแกนตารางการย้ายตำแหน่งในเธรดที่แยกจากกัน และขจัดความซ้ำซ้อนของส่วนที่ผสานซึ่งทำซ้ำในไฟล์ต่างๆ

ที่มา: opennet.ru

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