TL;DR
- mold 3.0.0은 64코어·128스레드 서버에서 Node.js를 링크할 때 GNU ld보다 약 24배, GNU gold보다 약 14배 빠름.
- 약 160MB 크기의 Node.js 실행 파일을 빌드해 링커별 링크 시간을 비교함.
- GNU ld 2.41은 2.52초, GNU gold 2.41은 1.46초, mold 3.0.0은 스레드 1개에서 0.49초, 8개에서 0.13초, 128개에서 0.11초를 기록함.
- mold는 스레드 1개만 사용해도 GNU ld보다 5배 빠르며, 8개 스레드로 거의 모든 성능 이점을 얻음.
-fuse-ld=mold옵션이나mold -run make -j128명령으로 빌드 스크립트를 수정하지 않고 사용할 수 있음.
링크 과정과 mold
- 컴파일러는 각 소스 파일을 오브젝트 파일로 변환하고, 링커는 오브젝트 파일과 라이브러리를 결합해 실행 파일을 만듦.
- 리눅스의 기본 링커는 대개 GNU ld(
bfd)이며, GNU binutils에는 속도를 높이도록 설계된 대안 링커gold도 포함됨.gold는 Google이 만들었으며 2008년에 처음 공개됨. - Rui Ueyama가 작성한
mold는 2021년에 처음 출시된 최신 링커로, GNU ld를 대체해 사용할 수 있으며 주요 장점은 속도임. 최신 릴리스는 버전 3임.
Node.js 링크 시간 비교
- 메인 브랜치의 Node.js를 GCC 14.3과 리눅스를 사용하는 Intel Xeon Gold 6548N 서버에서 빌드함. 서버는 Emerald Rapids 기반의 2소켓 구성으로, 64코어와 128스레드를 갖춤. 최종
node실행 파일 크기는 약 160MB임. - 실행 파일을 링크하는 명령을 기록해 링커별로 여섯 차례 실행하고, 중앙값을 보고함.
| 링커 | Node.js 링크 시간 |
|---|---:|
| GNU ld (bfd) 2.41 | 2.52초 |
| GNU gold 2.41 | 1.46초 |
| mold 3.0.0, 스레드 1개 | 0.49초 |
| mold 3.0.0, 스레드 8개 | 0.13초 |
| mold 3.0.0, 스레드 128개 | 0.11초 |
- 멀티스레딩을 사용하는
mold는 GNU ld보다 약 24배,gold보다 약 14배 빠름. mold가 스레드 1개만 사용해도 Node.js 링크에 0.5초가량 걸리며, GNU ld보다 5배 빠름. 스레드 8개만으로도 거의 모든 성능 이점을 얻음.
mold 사용 방법과 빌드 영향
- GCC 또는
clang에-fuse-ld=mold를 전달해 사용할 수 있음. mold -run make -j128처럼 실행하면-run옵션이 기본 링커를 호출하는 모든 명령을 가로채mold로 전달하므로 빌드 스크립트를 변경할 필요가 없음.- Node.js를 한 번만 빌드한다면 링크 시간 2초 절약은 큰 차이가 아니지만, 하루에도 여러 번 파일을 수정하고 다시 빌드하는 경우 링크 비용을 매번 부담하게 됨.
mold를 사용하면 링크 단계의 시간이 거의 들지 않음. - 스크립트와 원시 결과를 확인할 수 있음.
출처
- Daniel Lemire, 「mold를 이용한 더 빠른 소프트웨어 링크」, Daniel Lemire의 블로그, 2026년 10월 6일: https://lemire.me/blog/2026/10/06/linking-node-js-with-mold/.
- BibTeX
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요