Bencher로 CI에서 벤치마크를 추적하는 방법
대부분의 벤치마크 결과는 일시적입니다. 터미널이 스크롤백 한계에 도달하자마자 사라집니다. 일부 벤치마크 하네스는 결과를 캐시할 수 있지만, 대부분은 로컬에서만 그렇게 합니다. Bencher를 사용하면 로컬 및 CI 실행 모두에서 벤치마크를 추적하고 결과를 비교할 수 있으며, 여전히 선호하는 벤치마크 하네스를 사용할 수 있습니다.
지속적 벤치마킹 시, 즉 CI에서 벤치마크를 수행할 때 벤치마크 결과를 비교하는 두 가지 인기 있는 방법이 있습니다:
- 통계적 지속적 벤치마킹
- 기준선을 생성하기 위해 시간이 지남에 따라 벤치마크 결과를 추적합니다
- 이 기준선과 통계적 임계값을 사용하여 통계적 경계를 생성합니다
- 성능 저하를 탐지하기 위해 새 결과를 이 통계적 경계와 비교합니다
- 상대적 지속적 벤치마킹
- 현재 기준 코드에 대한 벤치마크를 실행합니다
- 백분율 임계값을 사용하여 기준 코드에 대한 경계를 생성합니다
- 코드의 새 버전으로 전환합니다
- 코드의 새 버전에 대한 벤치마크를 실행합니다
- 성능 저하를 탐지하기 위해 코드의 새 버전 결과를 기준 코드 결과와 비교합니다
통계적 연속 벤치마킹
빠른 시작 및 Docker 자가 호스팅 튜토리얼에서 이어서,
Save Walter White
프로젝트에 통계적 연속 벤치마킹을 추가해 봅시다.
🐰 계속하기 전에 API 토큰을 생성하고
BENCHER_API_TOKEN
환경 변수로 설정했는지 확인 하세요!
먼저, 우리의 CI 러너를 나타낼 새로운 테스트베드를 만들어야 합니다. 적절히 ci-runner
로 명명합니다.
bencher testbed create
CLI 서브 명령어를 사용하세요. 자세한 내용은 테스트베드 생성 문서를 참조하세요. (예:bencher testbed create
)--name
옵션을 원하는 테스트베드 이름으로 설정하세요. (예:--name ci-runner
)- 프로젝트 인수를
Save Walter White
프로젝트 슬러그로 지정하세요. (예:save-walter-white-1234abcd
)
다음으로, 우리의 ci-runner
테스트베드를 위한 새로운 Threshold를 만들어야 합니다:
bencher threshold create
CLI 서브 명령어를 사용하세요. 자세한 내용은 Threshold 생성 문서를 참조하세요. (예:bencher threshold create
)--branch
옵션을 기본main
브랜치로 설정하세요. (예:--branch main
)--branch
옵션을 새로운ci-runner
테스트베드로 설정하세요. (예:--testbed ci-runner
)--measure
옵션을bencher mock
이 생성한 내장 지연 측정값으로 설정하세요. 자세한 내용은 측정값 정의를 참조하세요. (예:--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의 연속 벤치마킹을 참조하세요.
우리는 main
브랜치의 모든 변경 사항을 CI에서 벤치마킹하여 역사적 기준선을 설정하고 유지 관리해야 합니다:
bencher run
CLI 서브 명령어를 사용하여feature-branch
브랜치 벤치마크를 실행하세요. 자세한 내용은 bencher run CLI 서브 명령어를 참조하세요. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정하세요. 자세한 내용은 프로젝트 옵션를 참조하세요. (예:--project save-walter-white-1234abcd
)--branch
옵션을 기본 브랜치 이름으로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예:--branch main
)--testbed
옵션을 테스트베드 이름으로 설정하세요. 자세한 내용은 테스트베드 옵션를 참조하세요. (예:--testbed ci-runner
)--adapter
옵션을 원하는 벤치마크 하네스 어댑터로 설정하세요. 자세한 내용은 벤치마크 하네스 어댑터를 참조하세요. (예:--adapter json
)- 경고가 발생하면 명령을 실패시키도록
--err
플래그를 설정하세요. 자세한 내용은 Threshold & Alerts를 참조하세요. (예:--err
) - 벤치마크 명령어 인수를 지정하세요.
자세한 내용은 벤치마크 명령어를 참조하세요.
(예:
bencher mock
)
마지막으로, 우리는 CI에서 성능 회귀를 잡을 준비가 되었습니다.
이것이 CI에서 feature-branch
라는 새로운 기능 브랜치의 성능을 추적하는 방법입니다:
bencher run
CLI 서브 명령어를 사용하여feature-branch
브랜치 벤치마크를 실행하세요. 자세한 내용은 bencher run CLI 서브 명령어를 참조하세요. (예:bencher run
)--project
옵션을 프로젝트 슬러그로 설정하세요. 자세한 내용은 프로젝트 옵션를 참조하세요. (예:--project save-walter-white-1234abcd
)--branch
옵션을 기능 브랜치 이름으로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예:--branch feature-branch
)--branch-start-point
옵션을 기능 브랜치 시작 지점으로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예:--branch-start-point main
)--branch-start-point-hash
옵션을 기능 브랜치 시작 지점의git
해시로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예:--branch-start-point-hash 32ae...dd8b
)- 항상 브랜치를 시작 지점으로 재설정하도록
--branch-reset
플래그를 설정하세요. 이는 벤치마크 데이터 이동을 방지합니다. 자세한 내용은 브랜치 선택를 참조하세요. (예:--branch-reset
) --testbed
옵션을 테스트베드 이름으로 설정하세요. 자세한 내용은 테스트베드 옵션를 참조하세요. (예:--testbed ci-runner
)- 원하는 벤치마크 하네스 어댑터로
--adapter
옵션을 설정하세요. 자세한 내용은 벤치마크 하네스 어댑터를 참조하세요. (예:--adapter json
) - 경고가 발생하면 명령을 실패시키도록
--err
플래그를 설정하세요. 자세한 내용은 Threshold & Alerts를 참조하세요. (예:--err
) - 벤치마크 명령어 인수를 지정하세요.
자세한 내용은 벤치마크 명령어를 참조하세요.
(예:
bencher mock
)
CI에서 이 명령이 처음 실행되면,
아직 존재하지 않는 feature-branch
브랜치를 생성합니다.
새로운 feature-branch
는 main
브랜치를
해시 32aea434d751648726097ed3ac760b57107edd8b
지점에서 시작 지점으로 사용합니다.
이는 feature-branch
가 모든 데이터와 Thresholds를
main
브랜치에서 복사하여 첫 번째 및 모든 후속 실행에서 bencher mock
결과를 비교할 수 있게 합니다.
상대적 연속 벤치마킹
빠른 시작 및 도커 자체 호스팅 튜토리얼에서 이어서,
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에서 벤치마크를 추적하는 방법을 배웠습니다! 🎉