Bencher로 CI에서 벤치마크를 추적하는 방법
대부분의 벤치마크 결과는 일시적입니다. 터미널이 스크롤백 한계에 도달하자마자 사라집니다. 일부 벤치마크 하네스는 결과를 캐시할 수 있지만, 대부분은 로컬에서만 그렇게 합니다. Bencher를 사용하면 로컬 및 CI 실행 모두에서 벤치마크를 추적하고 결과를 비교할 수 있으며, 여전히 선호하는 벤치마크 하네스를 사용할 수 있습니다.
지속적 벤치마킹 시, 즉 CI에서 벤치마크를 수행할 때 벤치마크 결과를 비교하는 두 가지 인기 있는 방법이 있습니다:
- 통계적 지속적 벤치마킹
- 기준선을 생성하기 위해 시간이 지남에 따라 벤치마크 결과를 추적합니다
- 이 기준선과 통계적 임계값을 사용하여 통계적 경계를 생성합니다
- 성능 저하를 탐지하기 위해 새 결과를 이 통계적 경계와 비교합니다
- 상대적 지속적 벤치마킹
- 현재 기준 코드에 대한 벤치마크를 실행합니다
- 백분율 임계값을 사용하여 기준 코드에 대한 경계를 생성합니다
- 코드의 새 버전으로 전환합니다
- 코드의 새 버전에 대한 벤치마크를 실행합니다
- 성능 저하를 탐지하기 위해 코드의 새 버전 결과를 기준 코드 결과와 비교합니다
통계적 지속 가능한 벤치마킹
빠른 시작 및 Docker 자체 호스팅 튜토리얼에서 이어서,
Save Walter White
프로젝트에 통계적 지속 가능한 벤치마킹을 추가해 봅시다.
🐰 진행하기 전에 API 토큰을 생성하고
BENCHER_API_TOKEN
환경 변수로 설정했는지 확인하세요!
먼저, CI 러너를 대표하는 새로운 Testbed를 생성해야 합니다. 이는 ci-runner
라고 적절하게 명명됩니다.
bencher testbed create
CLI 하위 명령어를 사용하십시오. 자세한 내용은 thetestbed create
문서를 참조하십시오. (예:bencher testbed create
)--name
옵션을 원하는 Testbed 이름으로 설정하십시오. (예:--name ci-runner
)- 프로젝트 인수로
Save Walter White
프로젝트 슬러그를 지정하십시오. (예:save-walter-white-1234abcd
)
다음으로, ci-runner
Testbed에 대한 새로운 Threshold를 생성해야 합니다:
bencher threshold create
CLI 하위 명령어를 사용하십시오. 자세한 내용은 thethreshold create
문서를 참조하십시오. (예:bencher threshold create
)--branch
옵션을 기본main
브랜치로 설정하십시오. (예:--branch main
)--testbed
옵션을 새ci-runner
Testbed로 설정하십시오. (예:--testbed ci-runner
)bencher mock
에 의해 생성된 내장지연시간(Latency)
측정 기준을--measure
옵션으로 설정하십시오. 측정 기준의 정의에 대한 자세한 내용은 the definition of Measure을 참조하십시오. (예:--measure Latency
)--test
옵션을t-test
Threshold로 설정하십시오. 전체 개요는 Thresholds & Alerts를 참조하십시오. (예:--test t-test
)--upper-boundary
옵션을 상한선0.95
로 설정하십시오. 전체 개요는 Thresholds & Alerts를 참조하십시오. (예:--upper-boundary 0.95
)- 프로젝트 인수로
Save Walter White
프로젝트 슬러그를 지정하십시오. (예:save-walter-white-1234abcd
)
이제 CI에서 벤치마킹을 실행할 준비가 되었습니다. 모든 CI 환경이 조금씩 다르기 때문에, 다음 예는 실제보다는 설명적인 목적으로 제공됩니다. 보다 구체적인 예시는 GitHub Actions에서의 지속 가능한 벤치마킹 및 GitLab CI/CD에서의 지속 가능한 벤치마킹을 참조하십시오.
CI에서 모든 변경 사항을 벤치마킹하여 main
브랜치에 대한 역사적 기준선을 생성하고 유지해야 합니다:
bencher run
CLI 하위 명령어를 사용하여feature-branch
브랜치 벤치마크를 실행하십시오. 전체 개요는 thebencher run
CLI 하위 명령어를 참조하십시오. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정하십시오. 자세한 내용은 the--project
문서를 참조하십시오. (예:--project save-walter-white-1234abcd
)--branch
옵션을 기본 브랜치 이름으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예:--branch main
)--testbed
옵션을 Testbed 이름으로 설정하십시오. 자세한 내용은 the--tested
문서를 참조하십시오. (예:--testbed ci-runner
)- 원하는 벤치마크 하네스 어댑터를
--adapter
옵션으로 설정하십시오. 전체 개요는 benchmark harness adapters를 참조하십시오. (예:--adapter json
) - 경고가 생성되면 명령을 실패하도록
--err
플래그를 설정하십시오. 전체 개요는 Threshold & Alerts를 참조하십시오. (예:--err
) - 벤치마크 명령 인수를 지정하십시오.
전체 개요는 benchmark command를 참조하십시오.
(예:
bencher mock
)
마지막으로, CI에서 성능 회귀를 캐치할 준비가 되었습니다.
CI에서 새 기능 브랜치인 feature-branch
의 성능을 추적하는 방법은 다음과 같습니다:
bencher run
CLI 하위 명령어를 사용하여feature-branch
브랜치 벤치마크를 실행하십시오. 전체 개요는 thebencher run
CLI 하위 명령어를 참조하십시오. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정하십시오. 자세한 내용은 the--project
문서를 참조하십시오. (예:--project save-walter-white-1234abcd
)--branch
옵션을 기능 브랜치 이름으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예:--branch feature-branch
)- 기능 브랜치 시작점을
--branch-start-point
옵션으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예:--branch-start-point main
) - 기능 브랜치 시작점
git
해시를--branch-start-point-hash
옵션으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예:--branch-start-point-hash 32ae...dd8b
) --testbed
옵션을 Testbed 이름으로 설정하십시오. 자세한 내용은 the--tested
문서를 참조하십시오. (예:--testbed ci-runner
)- 원하는 벤치마크 하네스 어댑터를
--adapter
옵션으로 설정하십시오. 전체 개요는 benchmark harness adapters를 참조하십시오. (예:--adapter json
) - 경고가 생성되면 명령을 실패하도록
--err
플래그를 설정하십시오. 전체 개요는 Threshold & Alerts를 참조하십시오. (예:--err
) - 벤치마크 명령 인수를 지정하십시오.
전체 개요는 benchmark command를 참조하십시오.
(예:
bencher mock
)
CI에서 이 명령을 처음 실행하면, 아직 존재하지 않는 feature-branch
브랜치가 생성됩니다.
새 feature-branch
는 해시 32aea434d751648726097ed3ac760b57107edd8b
에서 main
브랜치를 시작점으로 사용합니다.
이는 feature-branch
가 bencher mock
의 결과를 비교하기 위해 첫 번째 실행과 모든 후속 실행에서 main
브랜치의 모든 데이터와 Thresholds의 복사본을 가지게 됨을 의미합니다.
상대적 연속 벤치마킹
빠른 시작 및 도커 자체 호스팅 튜토리얼에서 이어서,
Save Walter White
프로젝트에 상대적 연속 벤치마킹을 추가해 보겠습니다.
🐰 진행하시기 전에 API 토큰을 생성하고
BENCHER_API_TOKEN
환경 변수로 설정했다는 것을 확인하세요!
먼저, CI 러너를 대표하는 새로운 Testbed를 ci-runner
라는 이름으로 생성해야 합니다.
bencher testbed create
CLI 서브커맨드를 사용합니다. 자세한 내용은 thetestbed create
docs를 확인하세요. (예:bencher testbed create
)--name
옵션을 원하는 Testbed 이름으로 설정합니다. (예:--name ci-runner
)- 프로젝트 인수를
Save Walter White
프로젝트 슬러그로 지정합니다. (예:save-walter-white-1234abcd
)
상대적 연속 벤치마킹은 코드의 두 버전을 나란히 비교합니다.
이는 CI/CD 환경이 복잡할 때, 실행간 사용 가능한 리소스가 크게 달라질 수 있는 경우 유용할 수 있습니다.
이 예제에서는 main
브랜치에서 실행된 결과와 feature-branch
라는 기능 브랜치에서 실행된 결과를 비교할 것입니다.
모든 CI 환경이 약간씩 다르기 때문에, 다음 예제는 설명적이기보단 실용적입니다.
특정 예제들은 GitHub Actions의 연속 벤치마킹 및 GitLab CI/CD에서의 연속 벤치마킹을 확인하세요.
먼저, CI에서 git
을 사용하여 main
브랜치를 체크아웃해야 합니다:
그 다음, CI에서 main
브랜치에 대한 벤치마크를 실행해야 합니다:
bencher run
CLI 서브커맨드를 사용하여main
브랜치 벤치마크를 실행합니다. 전체 개요는 thebencher run
CLI subcommand를 참조하십시오. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정합니다. 자세한 사항은 the--project
docs를 참조하십시오. (예:--project save-walter-white-1234abcd
)--branch
옵션을 기능 브랜치 이름으로 설정합니다. 전체 개요는 branch selection을 참조하십시오. (예:--branch feature-branch
)--branch-reset
플래그를 설정합니다. 전체 개요는 branch selection을 참조하십시오. (예:--branch-reset
)--testbed
옵션을 Testbed 이름으로 설정합니다. 자세한 사항은 the--tested
docs를 참조하십시오. (예:--testbed ci-runner
)- 원하는 벤치마크 하네스 어댑터를
--adapter
옵션으로 설정합니다. 전체 개요는 benchmark harness adapters을 참조하십시오. (예:--adapter json
) - 벤치마크 명령 인수를 지정합니다.
전체 개요는 benchmark command을 참조하십시오.
(예:
bencher mock
)
CI에서 이 명령어가 처음 실행되면, feature-branch
브랜치가 아직 존재하지 않으므로 생성됩니다.
새로운 feature-branch
는 시작점, 기존 데이터, 또는 임계값을 갖지 않을 것입니다.
이후 실행에서는 이전 버전의 feature-branch
가 이름이 변경되고 새로운 feature-branch
가 시작점, 기존 데이터, 또는 임계값 없이 생성됩니다.
다음으로, 새로운 feature-branch
브랜치에 대한 새로운 Threshold를 CI에서 생성해야 합니다:
bencher threshold create
CLI 서브커맨드를 사용합니다. 자세한 내용은 thethreshold create
docs를 참조하세요. (예:bencher threshold create
)- 새로운
feature-branch
브랜치에 대한--branch
옵션을 설정합니다. (예:--branch feature-branch
) --branch
옵션을ci-runner
Testbed로 설정합니다. (예:--testbed ci-runner
)--measure
옵션을bencher mock
에 의해 생성된 기본Latency
측정값으로 설정합니다. the definition of Measure에서 세부 정보를 참조하세요. (예:--measure Latency
)--test
옵션을percentage
임계값으로 설정합니다. 전체 개요는 Thresholds & Alerts를 참조하세요. (예:--test t-test
)- 상한선을
0.25
(즉,25%
)로 설정하는--upper-boundary
옵션을 설정합니다. 전체 개요는 Thresholds & Alerts를 참조하세요. (예:--upper-boundary 0.25
) - 프로젝트 인수를
Save Walter White
프로젝트 슬러그로 지정합니다. (예:save-walter-white-1234abcd
)
그런 다음, CI에서 git
을 사용하여 feature-branch
브랜치를 체크아웃해야 합니다:
마지막으로, CI에서 feature-branch
벤치마크를 실행할 준비가 되었습니다:
bencher run
CLI 서브커맨드를 사용하여feature-branch
벤치마크를 실행합니다. 전체 개요는 thebencher run
CLI subcommand를 참조하십시오. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정합니다. 자세한 사항은 the--project
docs를 참조하십시오. (예:--project save-walter-white-1234abcd
)--branch
옵션을 기능 브랜치 이름으로 설정합니다. 전체 개요는 branch selection을 참조하십시오. (예:--branch feature-branch
)--testbed
옵션을 Testbed 이름으로 설정합니다. 자세한 사항은 the--tested
docs를 참조하십시오. (예:--testbed ci-runner
)- 원하는 벤치마크 하네스 어댑터를
--adapter
옵션으로 설정합니다. 전체 개요는 benchmark harness adapters을 참조하십시오. (예:--adapter json
) - 경고가 생성되면 명령어가 실패하도록
--err
플래그를 설정합니다. 전체 개요는 Threshold & Alerts를 참조하십시오. (예:--err
) - 벤치마크 명령 인수를 지정합니다.
전체 개요는 benchmark command를 참조하십시오.
(예:
bencher mock
)
CI에서 이 명령이 실행될 때마다,
feature-branch
의 결과를 main
에서 발생한 가장 최근의 결과와만 비교합니다.
🐰 축하합니다! Bencher로 CI에서 벤치마크를 추적하는 방법을 배웠습니다! 🎉