기타 Lobsters · 1시간 전

"우리 링커가 왜 이렇게 느리지?" Mold vs Wild 벤치마크 차이 직접 분석한 개발자

핵심 요약
  • Mold 측 최신 벤치마크에서 Wild 링커가 기존 자체 발표보다 훨씬 느리게 측정되자 Wild 개발자가 직접 재현 및 원인 분석을 진행했습니다.
  • ext4와 tmpfs 파일시스템 차이, 빌드 파일 삭제 여부, fork 옵션 등 테스트 환경 설정에 따라 성능 격차가 크게 벌어진 것으로 확인됐습니다.
  • Wild 개발자는 파일 쓰기 최적화 부족을 인정하고 개선안을 적용하는 한편, 최근 Mold의 자체적인 버전 업데이트 최적화도 주요 원인으로 짚었습니다.
요약 초고속 링커(Linker) 경쟁을 벌이고 있는 'Mold'와 'Wild' 사이의 벤치마크 결과 차이를 두고 Wild 개발자 데이비드 래티모어(David Lattimore)가 직접 원인 분석에 나섰습니다. 최근 Mold 측이 업데이트한 벤치마크에 Wild를 처음 포함했는데, 지난 8월 Wild가 발표했던 자체 결과와 달리 Mold보다 상당히 느리게 나온 것이 발단이었습니다. 개발자가 두 테스트 환경을 대조한 결과 결정적인 세팅 차이들이 발견되었습니다. Wild는 SSD 수명 보호와 오차 감소를 위해 'tmpfs' 메모리 파일시스템 위에서 기존 빌드 출력 파일을 덮어쓰는 방식으로 테스트했던 반면, Mold는 실제 사용자 환경에 가까운 'ext4' 파일시스템에서 매 실행마다 출력 파일을 삭제하고 다시 쓰는 방식을 사용했습니다. 또한 Mold는 프로세스 종료 비용을 줄여주는 기본 포크(fork) 동작을 `--no-fork` 플래그로 꺼두고 측정했습니다. 실제로 Mold와 동일하게 ext4 환경에서 매번 출력 파일을 지우고 `--no-fork`로 실행하자 Wild의 속도가 대폭 떨어지며 Mold 측의 벤치마크 수치가 그대로 재현되었습니다. Wild 개발자는 파일 생성 및 디스크 쓰기 최적화(fallocate 공간 사전 할당, hugepages 매핑 등)가 기존 Wild에 부족했던 점을 인정하며 차기 릴리스에 이를 반영했다고 밝혔습니다. 또한 8월 이후 Mold 2.42.0 및 2.42.1 버전이 출시되면서 Mold 자체 성능이 크게 향상된 점과 64코어 스레드리퍼 같은 초고다핵 환경에서의 스레드 할당 정책 차이도 주요 원인으로 꼽았습니다.
Sponsored · 광고