由 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 核计算机上构建 c debuginfo 可执行文件需要 53 秒,使用 LLVM lld 需要 11.7 秒,使用 Mold 只需 2.2 秒(比速度快 26 倍) GNU 黄金)。 链接 Clang 13 (3.18 GB) 时,GNU gold 需要 64 秒,LLVM lld 需要 5.8 秒,Mold 需要 2.9 秒。 链接 Firefox 89 (1.64 GB) 时,GNU gold 需要 32.9 秒,LLVM lld 需要 6.8 秒,Mold 需要 1.4 秒。

由 LLVM lld 开发的 Mold builder 的第一个稳定版本

减少链接时间可以通过减少调试和测试更改期间生成可执行文件过程中的等待时间,大大提高开发大型项目的可用性。 Mold 的动机是每次更改代码后都必须等待链接完成的烦恼,以及现有链接器在多核系统上的糟糕性能,以及尝试一种根本不同的链接架构而不诉诸不必要的愿望复杂的模型,例如增量链接。

从 Mold 编译器准备的大量目标文件链接一个可执行文件的高性能是通过使用更快的算法、在可用 CPU 内核之间主动并行操作以及使用更高效的数据结构来实现的。 例如,Mold 实现了在复制文件的同时进行密集计算的技术,将目标文件预取到内存中,在解析字符时使用快速哈希表,在单独的线程中扫描重定位表,以及对不同文件中重复的合并部分进行去重。

来源: opennet.ru

添加评论