mold 논문, 전체 링크 단계 병렬화로 lld 대비 최대 16.1배 속도 보고
- mold는 대형 실사용 프로그램에서 수 GB 규모 디버그 바이너리를 수 초 이내, 많은 경우 1초 이내에 링크했다고 보고하며 lld보다 2.4배에서 16.1배, GNU ld보다 최대 112배 빨랐다고 밝힘
- Unix/Linux용 mold는 기존 링커의 확장을 막는 얽힌 심볼 해석과 아카이브 처리를 분리하고, 링크 파이프라인 전체에 데이터 병렬 처리를 적용함
- 저자는 절제 실험에서 한 가지 최적화가 속도를 지배하지 않았고, 모든 패스를 병렬화한 효과가 합쳐져 성능 향상이 났다고 설명함
- 논문은 15쪽, 그림 3개와 표 10개로 구성됐으며 ASPLOS 2027 채택 논문임
Hacker News 의견들
Wild가 지금은 mold보다 꽤 빠름. README 벤치마크를 보면 됨.
Rui가 논문 쓰면서 mold를 약 1.5배 더 빠르게 했다고 했음. 일부 최적화는 2.42에 들어갔고 아직 공개 안 된 것도 있어서 Wild 쪽은 mold 2.40 또는 2.41을 비교한 듯함.
Wild는 증분 링크를 목표로 해서 계속 보고 있음. Zig도 최근 증분 링크 지원을 발표했는데, 링크가 왜 증분화하기 어려운지는 David의 Wild 발표가 잘 설명함.
Rui가 공유재 가치를 100 늘리고 그중 1을 수익으로 얻겠다는 식으로 말한 게 좋았음. mold는 무료로 써도 된다는 오픈소스 사업 방식이라 응원하게 됨.
Windows와 macOS를 지원하면 우리처럼 규모 큰 회사에서도 쓸 텐데. 빠진 기능 개발비는 예산을 받을 수 있을 듯함.
Stagex Linux 배포판에서는 mold를 기본 링커로 씀. 전체 트리 빌드 시간이 몇 시간 줄었음.
논문에는 lld에도 넣은 일반적인 최적화 기법이 많음. 기존 링커는 호환성 차이를 감수하기 어려워서, 큰 개선은 새 링커에서 나오는 경우가 많다는 설명이 특히 흥미로웠음.
내 Lisp 코드 임베딩 작업에는 ELF의 빈 PHT 엔트리가 필요했는데, Rui가 요청 직후 --spare-program-headers를 넣어줬음. ld와 lld는 새 세그먼트를 붙이려면 PHT를 파일 끝으로 옮겨야 하지만 mold는 그 빈 공간을 피할 수 있음.
GNU gold가 곧 제거될 가능성이 있는데, 2000년대 후반 Ian Lance Taylor의 gold 글은 알고리즘 최적화와 GNU ld 기술 부채의 역사를 함께 보여줬음.
lld 23.x는 22.x보다 꽤 빨라졌음. 입력 파일 파싱과 심볼 해석 병렬화는 스레드 1개나 2개로 제한하면 오히려 느려질 수 있고, 논문의 Table 4 속도 향상 수치는 내 측정과 다르며 디버그 빌드에서는 mold와 lld 차이도 더 작았음.