CI에서 Rust 크리테리언 벤치마크를 추적하는 방법

Everett Pompeii

Everett Pompeii


이제 Criterion으로 Rust 코드의 벤치마크 측정 방법을 배웠으니, 이 벤치마크를 CI에서 어떻게 추적하는지 알아보겠습니다. 지속적 벤치마킹은 변경 집합마다 벤치마크를 실행하여 변경 사항이 성능 저하를 일으키지 않도록 보장하는 관행입니다. Criterion 벤치마크로 지속적 벤치마킹을 구현하는 가장 쉬운 방법은 Bencher를 사용하는 것입니다.

벤처(Bencher)란 무엇인가?

Bencher는 지속적인 벤치마킹 도구 모음입니다. 성능 회귀가 사용자에게 영향을 미친 경험이 있나요? Bencher가 그런 일이 일어나는 것을 막을 수 있었습니다. Bencher를 이용하면 성능 회귀를 상용 환경으로 이동하기 전에 탐지하고 예방할 수 있습니다.

  • 실행: 기존 벤치마킹 도구를 사용하여 로컬 또는 CI에서 벤치마크를 실행합니다. bencher CLI는 기존 벤치마킹 하네스를 감싸고 결과를 저장합니다.
  • 추적: 벤치마크 결과를 시간이 지남에 따라 추적합니다. 소스 브랜치, 테스트 베드, 측정 기반의 Bencher 웹 콘솔을 사용하여 결과를 모니터링, 쿼리, 그래프로 만듭니다.
  • 캐치: CI에서 성능 회귀를 잡아냅니다. Bencher는 최첨단, 사용자 정의 가능한 분석을 사용하여 상용 환경으로 가기 전에 성능 회귀를 탐지합니다.

단위 테스트가 CI에서 기능 회귀를 방지하기 위해 실행되는 것처럼, 벤치마크는 Bencher와 함께 CI에서 실행되어 성능 회귀를 방지해야 합니다. 성능 버그도 버그입니다!

Bencher 클라우드를 위한 단계

  1. Bencher 클라우드 계정 생성.
  2. API 토큰 생성 후, CI에 비밀로 추가합니다.
  3. GitHub Actions이나 GitLab CI/CD와 같은 CI를 위한 워크플로우를 만듭니다.
  4. CI 워크플로우에 Bencher CLI를 설치합니다.
  5. bencher run 서브커맨드를 사용하여 CI 워크플로우에서 벤치마크를 실행하고 rust_criterion 어댑터를 사용합니다.

Bencher 셀프 호스팅 설정 단계

  1. Bencher 셀프 호스팅 인스턴스를 생성합니다.
  2. Bencher 셀프 호스팅 인스턴스에 계정을 생성합니다.
  3. API 토큰을 생성하고 이를 비밀로 CI에 추가합니다.
  4. GitHub Actions 또는 GitLab CI/CD와 같은 CI 작업 흐름을 생성합니다.
  5. CI 작업 흐름에 Bencher CLI 설치를 설치합니다. CLI 버전이 Bencher 셀프 호스팅 인스턴스의 버전과 일치하는지 확인하십시오.
  6. bencher run 서브 명령어를 사용하여 CI 작업 흐름에서 벤치마크를 실행하고, rust_criterion 어댑터를 사용하여 ‘—host’ 옵션 설정을 Bencher 셀프 호스팅 인스턴스 URL로 설정합니다.

🦀 러스트 Criterion

러스트 Criterion 어댑터(rust_criterion)는 Criterion의 출력을 기대합니다. latency 측정값(즉, 나노초(ns))이 수집됩니다. lower_valueupper_value는 각각 기울기(가능한 경우) 또는 평균(그렇지 않은 경우)의 하한선과 상한선(즉, )입니다.

Terminal window
bencher run --adapter rust_criterion "cargo bench"

Track your benchmarks in CI

Have you ever had a performance regression impact your users? Bencher could have prevented that from happening. Bencher allows you to detect and prevent performance regressions before they make it to production with continuous benchmarking.

🤖 이 문서는 OpenAI GPT-4에 의해 자동으로 생성되었습니다. 정확하지 않을 수도 있고 오류가 있을 수도 있습니다. 오류를 발견하면 GitHub에서 문제를 열어주세요.