由 LLVM lld 開發的 Mold builder 的第一個穩定版本

LLVM lld 連結器和 chibicc 編譯器的作者 Rui Ueyama 推出了新的高效能 Mold 連結器的第一個穩定版本,在連結目標檔案的速度方面明顯快於 GNU gold 和 LLVM lld 連結器。 該專案被認為已準備好進行生產實施,並且可以用作 Linux 系統上 GNU 連結器的更快、透明的替代品。 下一個主要版本的計劃包括完成對 macOS 平台的支持,之後將開始針對 Windows 調整 Mold。

Mold是用C++(C++20)編寫的,並在AGPLv3下獲得許可,它與GPLv3相容,但與GPLv2不相容,因為它在開發網路服務時需要開放更改。 這種選擇的原因是希望獲得開發資金——作者願意出售程式碼的權利,以便在寬鬆的許可證(例如 MIT)下進行重新許可,或為那些對 AGPL 不滿意的人提供單獨的商業許可證。

Mold 支援 GNU 連結器的所有功能,並且具有非常高的效能 - 連結執行速度僅為使用 cp 實用程式複製檔案速度的一半。 例如,在建置 Chrome 96(程式碼大小 1.89 GB)時,在使用 GNU gold 的 8 核心電腦上將執行檔與 debuginfo 連結需要 53 秒,LLVM lld - 11.7 秒,而 Mold 只需 2.2 秒(比GNU 黃金)。 當連結 Clang 26 (13 GB) 時,GNU gold 需要 3.18 秒,LLVM lld 需要 64 秒,Mold 需要 5.8 秒。 建置 Firefox 2.9 (89 GB) 時,GNU gold 需要 1.64 秒,LLVM lld 需要 32.9 秒,Mold 需要 6.8 秒。

由 LLVM lld 開發的 Mold builder 的第一個穩定版本

減少建置時間可以透過減少偵錯和測試變更時產生可執行檔流程中的等待來顯著提高開發大型專案的便利性。 創建 Mold 的動機是每次程式碼變更後必須等待連結完成的挫折感、多核心系統上現有連結器的效能不佳,以及希望嘗試一種根本不同的連結架構而不訴諸過於複雜的模型,例如作為增量連結。

透過使用更快的演算法、可用 CPU 核心之間的主動並行操作以及使用更有效率的資料結構,可以實現從 Mold 中大量編譯器準備的目標檔案連結可執行檔的高效能。 例如,Mold 實現了在複製檔案時執行密集計算、將物件檔案預先載入到記憶體、使用快速雜湊表進行字元解析、在單獨執行緒中掃描重定位表以及對不同檔案中重複的合併部分進行重複數據刪除的技術。

來源: opennet.ru

添加評論