피드로 돌아가기
Hacker NewsHacker News
DevOps

buildcache Lua 플러그인 도입으로 Firefox 빌드 시간 17% 단축

How to make Firefox builds 17% faster

2026년 4월 13일4intermediate

Context

Firefox 빌드 과정 중 WebIDL binding 코드 생성 단계가 매 clobber build마다 반복 실행되는 구조. 해당 단계는 입력값에 따라 출력이 결정되는 Deterministic 특성을 가지나, 기존 Compiler Cache가 Python 기반 Codegen 과정을 처리하지 못하는 한계 존재.

Technical Solution

  • buildcache의 Lua plugin system을 활용하여 컴파일러 외 임의 명령어를 캐싱하는 Custom Wrapper 설계
  • py_action 매크로에 Command Wrapper 인자를 추가하여 buildcache python3 ... 형태로 실행 경로 변경
  • webidl.lua 플러그인을 통해 file-lists.jsoncodegen.json 기반의 Input/Output 파일 매핑 정의
  • Preprocessed output 대신 입력 파일을 직접 해싱하는 direct_mode를 적용하여 Python 스크립트 실행 최적화
  • MOZ_USING_BUILDCACHE 가드를 통해 ccache, sccache와 차별화된 buildcache 전용 캐싱 경로 확보

Impact

  • Warm build 기준 전체 빌드 시간을 1분 27초에서 1분 12초로 약 15초 추가 단축
  • Cold build(5분 35초) 대비 캐시 적용 후 최종 빌드 시간 약 76% 감소 달성

Key Takeaway

빌드 파이프라인의 병목이 컴파일러가 아닌 Deterministic한 스크립트 단계에 있을 경우, 범용 명령어를 가로챌 수 있는 Wrapper 기반의 캐싱 레이어 설계가 유효함.


- 빌드 프로세스 내 Deterministic하지만 반복 실행되는 Non-compiler 단계 식별 - 단순 파일 기반 캐싱을 넘어 Input/Output 의존성을 정밀하게 정의하는 Lua/Python 기반 Wrapper 도입 검토 - 대용량 바이너리 생성 시 `max_local_entry_size` 등 캐시 엔트리 크기 제약 사항 확인

원문 읽기