CI에서 Rust 컴파일 시간을 추적하는 방법
Everett Pompeii
빌드 시간에서 컴파일 시간이 중요한 부분을 차지할 수 있으며, 특히 Rust에서 그렇습니다. 지속적 벤치마킹은 성능 저하를 초래하지 않도록 하기 위해 매 변화 집합마다 벤치마크를 수행하는 관행입니다. 컴파일 시간을 벤치마크로 처리하고 이를 CI에서 추적하여 느린 컴파일 시간을 잡아낼 수 있습니다. Rust 컴파일 시간에 대해 지속적 벤치마킹을 구현하는 가장 쉬운 방법은 Bencher를 사용하는 것입니다.
벤처(Bencher)란 무엇인가요?
Bencher는 지속적인 벤치마킹 도구 모음입니다. 성능 회귀가 사용자에게 영향을 미친 경험이 있나요? Bencher가 그런 일이 일어나는 것을 막을 수 있었습니다. Bencher를 이용하면 성능 회귀를 상용 환경으로 이동하기 전에 탐지하고 예방할 수 있습니다.
- 실행: 기존 벤치마킹 도구를 사용하여 로컬 또는 CI에서 벤치마크를 실행합니다.
bencher
CLI는 기존 벤치마킹 하네스를 감싸고 결과를 저장합니다. - 추적: 벤치마크 결과를 시간이 지남에 따라 추적합니다. 소스 브랜치, 테스트 베드, 측정 기반의 Bencher 웹 콘솔을 사용하여 결과를 모니터링, 쿼리, 그래프로 만듭니다.
- 캐치: CI에서 성능 회귀를 잡아냅니다. Bencher는 최첨단, 사용자 정의 가능한 분석을 사용하여 상용 환경으로 가기 전에 성능 회귀를 탐지합니다.
단위 테스트가 CI에서 기능 회귀를 방지하기 위해 실행되는 것처럼, 벤치마크는 Bencher와 함께 CI에서 실행되어 성능 회귀를 방지해야 합니다. 성능 버그도 버그입니다!
Bencher 클라우드를 위한 단계
- Bencher 클라우드 계정 생성.
- API 토큰 생성 후, CI에 비밀로 추가합니다.
- GitHub Actions이나 GitLab CI/CD와 같은 CI를 위한 워크플로우를 만듭니다.
- CI 워크플로우에 Bencher CLI를 설치합니다.
-
Rust 코드를 CI 워크플로에서
bencher run
서브 커맨드를 사용하여--build-time
플래그와json
어댑터를 사용하여 컴파일합니다.
Bencher 셀프 호스팅 설정 단계
- Bencher 셀프 호스팅 인스턴스를 생성합니다.
- Bencher 셀프 호스팅 인스턴스에 계정을 생성합니다.
- API 토큰을 생성하고 이를 비밀로 CI에 추가합니다.
- GitHub Actions 또는 GitLab CI/CD와 같은 CI 작업 흐름을 생성합니다.
- CI 작업 흐름에 Bencher CLI 설치를 설치합니다. CLI 버전이 Bencher 셀프 호스팅 인스턴스의 버전과 일치하는지 확인하십시오.
-
Rust 코드를 CI 워크플로에서
bencher run
서브 커맨드를 사용하여--build-time
플래그와json
어댑터를 사용하고--host
옵션을 Bencher Self-Hosted 인스턴스 URL로 설정하여 컴파일합니다.
⏱️ 빌드 시간
bencher run
CLI 서브커맨드는 --build-time
플래그와 함께 사용하여, 배포물의 빌드 시간(즉, 컴파일 시간)을 추적할 수 있습니다. 내부적으로 bencher run
은 결과를 Bencher Metric Format (BMF) JSON으로 출력합니다. 따라서 명시적으로 the json
adapter을 사용하는 것이 좋습니다. 자세한 내용은 빌드 시간 추적 방법을 참조하세요.
build-time
측정치(즉, 초 (s)
)는 수집됩니다. 빌드 시간 값(즉, value
)만 사용할 수 있습니다. lower_value
나 upper_value
는 수집되지 않습니다. build-time
측정치는 모든 프로젝트에 기본적으로 생성되지 않습니다. 그러나 --build-time
플래그를 사용하면 이 측정치는 프로젝트에 자동으로 생성됩니다.
Track your benchmarks in CI
Have you ever had a performance regression impact your users? Bencher could have prevented that from happening with continuous benchmarking.