Turborepo 실행 그래프와 프로파일 최적화
작업 그래프 계산과 프로파일 분석을 개선해 Turborepo의 대규모 저장소 성능을 크게 높였습니다.
교안에 영향
작업 그래프와 프로파일 형식이 바뀌어 예전 성능 안내 글의 측정치와 프로파일 해석 설명은 그대로 맞지 않을 수 있습니다.
요약
- 작업 그래프 계산이 저장소 크기에 따라 81~91% 빨라졌고, 가장 큰 저장소에서는 거의 즉시 실행되는 수준이 되었습니다. - Time to First Task가 11배 빨라졌습니다. - 새 turborepo-profile-md 크레이트로 .md 프로파일을 함께 생성해 분석성과 에이전트 활용성을 높였습니다. - 병렬화, 할당 제거, 시스템 호출 감소로 추가 성능 개선을 이뤘고 버그 수정도 함께 반영했습니다.
바뀐 것
새 기능
- 새 turborepo-profile-md 크레이트를 추가해 각 trace 옆에 .md 프로파일을 생성하도록 했습니다.
개선
- Turborepo가 작업 그래프를 계산하는 속도를 저장소 크기에 따라 81~91% 개선했습니다.
- Time to First Task를 11배 더 빠르게 만들었습니다.
- Hot functions, call trees, caller/callee 관계를 한 줄짜리 Markdown 형식으로 제공해 프로파일 읽기와 grepping을 쉽게 했습니다.
- 병렬화로 git index 처리, 파일시스템 glob 탐색, lockfile 파싱, package.json 로딩의 순차 작업을 동시에 처리하도록 바꿨습니다.
- 중복 복사와 clone을 줄여 reference-based hashing, glob exclusion filter 사전 컴파일, 공유 HTTP client 사용을 적용했습니다.
- 패키지별 git subprocess 호출을 저장소 단위 인덱스로 묶고, git subprocess를 libgit2 호출로 바꾼 뒤 gix-index로 교체했습니다.
- git index의 SHA-1 해시를 힙 할당 String 대신 stack-allocated OidHash로 저장하도록 바꿨습니다.
수정
- 캐시 fetch에서 불필요한 .tar 확인과 중복 시스템 호출을 줄였습니다.