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를 설치합니다.
-
CI 워크플로에서
bencher run
서브 명령어를 사용하여 Rust 코드를 컴파일합니다. 바이너리의 출력 경로로 설정된--file-size
옵션과 함께json
어댑터를 사용하십시오.
Bencher 셀프 호스팅 설정 단계
- Bencher 셀프 호스팅 인스턴스를 생성합니다.
- Bencher 셀프 호스팅 인스턴스에 계정을 생성합니다.
- API 토큰을 생성하고 이를 비밀로 CI에 추가합니다.
- GitHub Actions 또는 GitLab CI/CD와 같은 CI 작업 흐름을 생성합니다.
- CI 작업 흐름에 Bencher CLI 설치를 설치합니다. CLI 버전이 Bencher 셀프 호스팅 인스턴스의 버전과 일치하는지 확인하십시오.
-
CI 워크플로에서
bencher run
서브 명령어를 사용하여 Rust 코드를 컴파일합니다. 바이너리의 출력 경로로 설정된--file-size
옵션과 함께json
어댑터를 사용하고--host
옵션을 Bencher 셀프 호스팅 인스턴스 URL로 설정하십시오.
⚖️ 파일 크기
bencher run
CLI 서브커맨드는 --file-size
옵션을 사용하여
배포하는 파일(즉, 바이너리 크기)의 크기를 추적하는 데 사용될 수 있습니다.
--file-size
옵션은 크기가 측정될 파일의 파일 경로를 기대합니다.
내부적으로, bencher run
은Bencher Metric Format (BMF) JSON으로
결과를 출력합니다.
따라서 the json
adapter를 명시적으로 사용하는 것이 좋은 관행입니다.
더 자세한 내용은 파일 크기 추적 방법을 참조하세요.
file-size
측정(즉, bytes (B)
)이 수집됩니다.
파일 크기 값(즉, value
)만 사용할 수 있습니다.
lower_value
또는 upper_value
은 수집되지 않습니다.
file-size
측정은 모든 프로젝트에 대해 기본적으로 생성되지 않습니다.
하지만, --file-size
옵션을 사용할 때, 이 측정은 프로젝트에 대해 자동으로 생성됩니다.
--file-size
옵션은 여러 파일 크기를 추적하려면 여러 번 사용할 수 있습니다.
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.