แม่พิมพ์ 1.1 ได้รับการเผยแพร่แล้วรู้ข่าวของ Linker ที่ทันสมัยนี้ที่เหนือกว่า GNU gold และ LLVM

หลายวันก่อน มีการประกาศเปิดตัว Linker Mold 1.1 รุ่นใหม่ ซึ่งสามารถใช้เป็นตัวเปลี่ยนที่โปร่งใสเร็วกว่าสำหรับตัวเชื่อมโยง GNU บนระบบ Linux

ในเวอร์ชันใหม่ของแม่พิมพ์ 1.1 เป็นเวอร์ชันที่ มีคุณลักษณะใหม่ การแก้ไขข้อบกพร่อง และการปรับปรุงประสิทธิภาพ

เกี่ยวกับโมลด์

แม่พิมพ์ รองรับคุณสมบัติทั้งหมดของตัวเชื่อมโยง GNU และมีประสิทธิภาพสูงมาก เนื่องจากลิงก์ที่สร้างนั้นเร็วเป็นสองเท่าของเพียงแค่การคัดลอกไฟล์ด้วยยูทิลิตี้ cp

ด้วยวิธีนี้ การลดเวลาในการรวบรวมช่วยเพิ่มความสะดวกในการพัฒนาโครงการขนาดใหญ่ได้อย่างมาก โดยลดเวลารอในกระบวนการสร้างไฟล์ที่เรียกใช้งานได้เมื่อทำการดีบั๊กและทดสอบการเปลี่ยนแปลง

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

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

เช่น แม่พิมพ์ใช้เทคนิคในการคำนวณแบบเข้มข้นพร้อมๆ กัน ด้วยการคัดลอกไฟล์, โหลดไฟล์อ็อบเจ็กต์ลงในหน่วยความจำในเชิงรุก, โดยใช้ตารางแฮชที่รวดเร็วเมื่อแก้ไขอักขระ, การสแกนตารางการย้ายถิ่นฐานในสตรีมที่แยกจากกันและส่วนการขจัดข้อมูลซ้ำซ้อน ที่ซ้ำกันในไฟล์ต่างๆ

นวัตกรรมหลักของแม่พิมพ์ 1.1

ในเวอร์ชันใหม่ของ Mold 1.1 ที่นำเสนอนี้ เน้นว่า รองรับการเพิ่มประสิทธิภาพลิงค์สเตจ (LTO, การเพิ่มประสิทธิภาพเวลาลิงก์)

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

ก่อนหน้านี้ เมื่อพบไฟล์รหัสกลาง (IR) ของ GCC หรือ LLVM ตัวเชื่อมโยง ld.bfd หรือ ld.lld ที่เหมาะสมถูกเรียกใช้ แต่ตอนนี้ Mold จัดการไฟล์ IR ด้วยตัวเองและใช้ปลั๊กอิน Linker API ซึ่งใช้ใน GNU ld และ ตัวเชื่อมทองคำ GNU ความเร็วเมื่อเปิดใช้งาน LTO นั้นเร็วกว่าตัวเชื่อมโยงอื่นๆ เพียงเล็กน้อยเท่านั้น เนื่องจากใช้เวลาส่วนใหญ่ในการปรับแต่งโค้ดให้เหมาะสม ไม่ใช่การลิงก์

นอกจากนี้ยังมีการเน้นย้ำว่า เพิ่มตัวเลือก “–print-dependencies” และ “–print-dependencies=full” pเพื่อสร้างข้อมูลในรูปแบบ CSV เกี่ยวกับการขึ้นต่อกัน ระหว่างไฟล์อินพุต ซึ่งสามารถใช้เพื่อวิเคราะห์เหตุผลในการเชื่อมต่อเมื่อเชื่อมโยงไฟล์อ็อบเจ็กต์บางไฟล์หรือในขณะที่ทำงานเพื่อลดการพึ่งพาระหว่างไฟล์

การเปลี่ยนแปลงอีกประการหนึ่งที่โดดเด่นจากการเปลี่ยนแปลงครั้งใหม่ก็คือ รองรับสถาปัตยกรรม RISC-V (RV64) บนแพลตฟอร์มโฮสต์และเป้าหมาย

นอกจากนั้น เรายังพบว่า เพิ่มตัวเลือก “–emit-relocs” เพื่อเปิดใช้งานการคัดลอกส่วนการย้ายที่อยู่ ตั้งแต่ไฟล์อินพุตไปจนถึงไฟล์สุดท้ายสำหรับการเพิ่มประสิทธิภาพเพิ่มเติมเพื่อใช้ในขั้นตอนโพสต์ลิงก์

การเปลี่ยนแปลงอื่น ๆ ที่โดดเด่น:

  • เพิ่มตัวเลือก “–shuffle-sections” เพื่อสุ่มลำดับของส่วนต่างๆ ก่อนแก้ไขที่อยู่ในพื้นที่ที่อยู่เสมือน
  • เพิ่มตัวเลือก "–เตือนครั้งเดียว" และ "–เตือน-ข้อความ"
  • ลบการพึ่งพา libxxhash

ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบรายละเอียดได้ในไฟล์ ลิงค์ต่อไปนี้

วิธีการติดตั้งแม่พิมพ์?

สำหรับผู้ที่สนใจจะทำงานกับ Mold ได้ สามารถขอรับยูทิลิตี้ได้โดยการดาวน์โหลดและคอมไพล์ซอร์สโค้ด ในการดำเนินการนี้ เพียงเปิดเทอร์มินัลแล้วพิมพ์ดังต่อไปนี้:

git clone https://github.com/rui314/mold.git
cd mold
git checkout v1.1.1
make -j$(nproc) CXX=clang++
sudo make install

หากต้องการทราบการใช้แม่พิมพ์ คุณสามารถศึกษาเอกสารประกอบ ในลิงค์นี้


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา