Bencher로 CI에서 벤치마크를 추적하는 방법


대부분의 벤치마크 결과는 일시적입니다. 터미널이 스크롤백 한계에 도달하자마자 사라집니다. 일부 벤치마크 하네스는 결과를 캐시할 수 있지만, 대부분은 로컬에서만 그렇게 합니다. Bencher를 사용하면 로컬 및 CI 실행 모두에서 벤치마크를 추적하고 결과를 비교할 수 있으며, 여전히 선호하는 벤치마크 하네스를 사용할 수 있습니다.

지속적 벤치마킹 시, 즉 CI에서 벤치마크를 수행할 때 벤치마크 결과를 비교하는 두 가지 인기 있는 방법이 있습니다:

  • 통계적 지속적 벤치마킹
    1. 기준선을 생성하기 위해 시간이 지남에 따라 벤치마크 결과를 추적합니다
    2. 이 기준선과 통계적 임계값을 사용하여 통계적 경계를 생성합니다
    3. 성능 저하를 탐지하기 위해 새 결과를 이 통계적 경계와 비교합니다
  • 상대적 지속적 벤치마킹
    1. 현재 기준 코드에 대한 벤치마크를 실행합니다
    2. 백분율 임계값을 사용하여 기준 코드에 대한 경계를 생성합니다
    3. 코드의 새 버전으로 전환합니다
    4. 코드의 새 버전에 대한 벤치마크를 실행합니다
    5. 성능 저하를 탐지하기 위해 코드의 새 버전 결과를 기준 코드 결과와 비교합니다

통계적 지속 가능한 벤치마킹

빠른 시작Docker 자체 호스팅 튜토리얼에서 이어서, Save Walter White 프로젝트에 통계적 지속 가능한 벤치마킹을 추가해 봅시다.

🐰 진행하기 전에 API 토큰을 생성하고 BENCHER_API_TOKEN 환경 변수로 설정했는지 확인하세요!

먼저, CI 러너를 대표하는 새로운 Testbed를 생성해야 합니다. 이는 ci-runner라고 적절하게 명명됩니다.

bencher testbed create \
--name ci-runner \
save-walter-white-1234abcd
  1. bencher testbed create CLI 하위 명령어를 사용하십시오. 자세한 내용은 the testbed create 문서를 참조하십시오. (예: bencher testbed create)
  2. --name 옵션을 원하는 Testbed 이름으로 설정하십시오. (예: --name ci-runner)
  3. 프로젝트 인수로 Save Walter White 프로젝트 슬러그를 지정하십시오. (예: save-walter-white-1234abcd)

다음으로, ci-runner Testbed에 대한 새로운 Threshold를 생성해야 합니다:

bencher threshold create \
--branch main \
--testbed ci-runner \
--measure Latency \
--test t-test \
--upper-boundary 0.95 \
save-walter-white-1234abcd
  1. bencher threshold create CLI 하위 명령어를 사용하십시오. 자세한 내용은 the threshold create 문서를 참조하십시오. (예: bencher threshold create)
  2. --branch 옵션을 기본 main 브랜치로 설정하십시오. (예: --branch main)
  3. --testbed 옵션을 새 ci-runner Testbed로 설정하십시오. (예: --testbed ci-runner)
  4. bencher mock에 의해 생성된 내장 지연시간(Latency) 측정 기준을 --measure 옵션으로 설정하십시오. 측정 기준의 정의에 대한 자세한 내용은 the definition of Measure을 참조하십시오. (예: --measure Latency)
  5. --test 옵션을 t-test Threshold로 설정하십시오. 전체 개요는 Thresholds & Alerts를 참조하십시오. (예: --test t-test)
  6. --upper-boundary 옵션을 상한선 0.95로 설정하십시오. 전체 개요는 Thresholds & Alerts를 참조하십시오. (예: --upper-boundary 0.95)
  7. 프로젝트 인수로 Save Walter White 프로젝트 슬러그를 지정하십시오. (예: save-walter-white-1234abcd)

이제 CI에서 벤치마킹을 실행할 준비가 되었습니다. 모든 CI 환경이 조금씩 다르기 때문에, 다음 예는 실제보다는 설명적인 목적으로 제공됩니다. 보다 구체적인 예시는 GitHub Actions에서의 지속 가능한 벤치마킹GitLab CI/CD에서의 지속 가능한 벤치마킹을 참조하십시오.

CI에서 모든 변경 사항을 벤치마킹하여 main 브랜치에 대한 역사적 기준선을 생성하고 유지해야 합니다:

bencher run \
--project save-walter-white-1234abcd \
--branch main \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. bencher run CLI 하위 명령어를 사용하여 feature-branch 브랜치 벤치마크를 실행하십시오. 전체 개요는 the bencher run CLI 하위 명령어를 참조하십시오. (예: bencher run)
  2. --project 옵션을 프로젝트 슬러그로 설정하십시오. 자세한 내용은 the --project 문서를 참조하십시오. (예: --project save-walter-white-1234abcd)
  3. --branch 옵션을 기본 브랜치 이름으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예: --branch main)
  4. --testbed 옵션을 Testbed 이름으로 설정하십시오. 자세한 내용은 the --tested 문서를 참조하십시오. (예: --testbed ci-runner)
  5. 원하는 벤치마크 하네스 어댑터를 --adapter 옵션으로 설정하십시오. 전체 개요는 benchmark harness adapters를 참조하십시오. (예: --adapter json)
  6. 경고가 생성되면 명령을 실패하도록 --err 플래그를 설정하십시오. 전체 개요는 Threshold & Alerts를 참조하십시오. (예: --err)
  7. 벤치마크 명령 인수를 지정하십시오. 전체 개요는 benchmark command를 참조하십시오. (예: bencher mock)

마지막으로, CI에서 성능 회귀를 캐치할 준비가 되었습니다. CI에서 새 기능 브랜치인 feature-branch의 성능을 추적하는 방법은 다음과 같습니다:

bencher run \
--project save-walter-white-1234abcd \
--branch feature-branch \
--branch-start-point main \
--branch-start-point-hash 32aea434d751648726097ed3ac760b57107edd8b \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. bencher run CLI 하위 명령어를 사용하여 feature-branch 브랜치 벤치마크를 실행하십시오. 전체 개요는 the bencher run CLI 하위 명령어를 참조하십시오. (예: bencher run)
  2. --project 옵션을 프로젝트 슬러그로 설정하십시오. 자세한 내용은 the --project 문서를 참조하십시오. (예: --project save-walter-white-1234abcd)
  3. --branch 옵션을 기능 브랜치 이름으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예: --branch feature-branch)
  4. 기능 브랜치 시작점을 --branch-start-point 옵션으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예: --branch-start-point main)
  5. 기능 브랜치 시작점 git 해시를 --branch-start-point-hash 옵션으로 설정하십시오. 전체 개요는 branch selection를 참조하십시오. (예: --branch-start-point-hash 32ae...dd8b)
  6. --testbed 옵션을 Testbed 이름으로 설정하십시오. 자세한 내용은 the --tested 문서를 참조하십시오. (예: --testbed ci-runner)
  7. 원하는 벤치마크 하네스 어댑터를 --adapter 옵션으로 설정하십시오. 전체 개요는 benchmark harness adapters를 참조하십시오. (예: --adapter json)
  8. 경고가 생성되면 명령을 실패하도록 --err 플래그를 설정하십시오. 전체 개요는 Threshold & Alerts를 참조하십시오. (예: --err)
  9. 벤치마크 명령 인수를 지정하십시오. 전체 개요는 benchmark command를 참조하십시오. (예: bencher mock)

CI에서 이 명령을 처음 실행하면, 아직 존재하지 않는 feature-branch 브랜치가 생성됩니다. 새 feature-branch는 해시 32aea434d751648726097ed3ac760b57107edd8b에서 main 브랜치를 시작점으로 사용합니다. 이는 feature-branchbencher mock의 결과를 비교하기 위해 첫 번째 실행과 모든 후속 실행에서 main 브랜치의 모든 데이터와 Thresholds의 복사본을 가지게 됨을 의미합니다.

상대적 연속 벤치마킹

빠른 시작도커 자체 호스팅 튜토리얼에서 이어서, Save Walter White 프로젝트에 상대적 연속 벤치마킹을 추가해 보겠습니다.

🐰 진행하시기 전에 API 토큰을 생성하고 BENCHER_API_TOKEN 환경 변수로 설정했다는 것을 확인하세요!

먼저, CI 러너를 대표하는 새로운 Testbed를 ci-runner라는 이름으로 생성해야 합니다.

bencher testbed create \
--name ci-runner \
save-walter-white-1234abcd
  1. bencher testbed create CLI 서브커맨드를 사용합니다. 자세한 내용은 the testbed create docs를 확인하세요. (예: bencher testbed create)
  2. --name 옵션을 원하는 Testbed 이름으로 설정합니다. (예: --name ci-runner)
  3. 프로젝트 인수를 Save Walter White 프로젝트 슬러그로 지정합니다. (예: save-walter-white-1234abcd)

상대적 연속 벤치마킹은 코드의 두 버전을 나란히 비교합니다. 이는 CI/CD 환경이 복잡할 때, 실행간 사용 가능한 리소스가 크게 달라질 수 있는 경우 유용할 수 있습니다. 이 예제에서는 main 브랜치에서 실행된 결과와 feature-branch라는 기능 브랜치에서 실행된 결과를 비교할 것입니다. 모든 CI 환경이 약간씩 다르기 때문에, 다음 예제는 설명적이기보단 실용적입니다. 특정 예제들은 GitHub Actions의 연속 벤치마킹GitLab CI/CD에서의 연속 벤치마킹을 확인하세요.

먼저, CI에서 git을 사용하여 main 브랜치를 체크아웃해야 합니다:

git checkout main

그 다음, CI에서 main 브랜치에 대한 벤치마크를 실행해야 합니다:

bencher run \
--project save-walter-white-1234abcd \
--branch feature-branch \
--branch-reset \
--testbed ci-runner \
--adapter json \
bencher mock
  1. bencher run CLI 서브커맨드를 사용하여 main 브랜치 벤치마크를 실행합니다. 전체 개요는 the bencher run CLI subcommand를 참조하십시오. (예: bencher run)
  2. --project 옵션을 프로젝트 슬러그로 설정합니다. 자세한 사항은 the --project docs를 참조하십시오. (예: --project save-walter-white-1234abcd)
  3. --branch 옵션을 기능 브랜치 이름으로 설정합니다. 전체 개요는 branch selection을 참조하십시오. (예: --branch feature-branch)
  4. --branch-reset 플래그를 설정합니다. 전체 개요는 branch selection을 참조하십시오. (예: --branch-reset)
  5. --testbed 옵션을 Testbed 이름으로 설정합니다. 자세한 사항은 the --tested docs를 참조하십시오. (예: --testbed ci-runner)
  6. 원하는 벤치마크 하네스 어댑터를 --adapter 옵션으로 설정합니다. 전체 개요는 benchmark harness adapters을 참조하십시오. (예: --adapter json)
  7. 벤치마크 명령 인수를 지정합니다. 전체 개요는 benchmark command을 참조하십시오. (예: bencher mock)

CI에서 이 명령어가 처음 실행되면, feature-branch 브랜치가 아직 존재하지 않으므로 생성됩니다. 새로운 feature-branch는 시작점, 기존 데이터, 또는 임계값을 갖지 않을 것입니다. 이후 실행에서는 이전 버전의 feature-branch가 이름이 변경되고 새로운 feature-branch가 시작점, 기존 데이터, 또는 임계값 없이 생성됩니다.

다음으로, 새로운 feature-branch 브랜치에 대한 새로운 Threshold를 CI에서 생성해야 합니다:

bencher threshold create \
--branch feature-branch \
--testbed ci-runner \
--measure Latency \
--test percentage \
--upper-boundary 0.25 \
save-walter-white-1234abcd
  1. bencher threshold create CLI 서브커맨드를 사용합니다. 자세한 내용은 the threshold create docs를 참조하세요. (예: bencher threshold create)
  2. 새로운 feature-branch 브랜치에 대한 --branch 옵션을 설정합니다. (예: --branch feature-branch)
  3. --branch 옵션을 ci-runner Testbed로 설정합니다. (예: --testbed ci-runner)
  4. --measure 옵션을 bencher mock에 의해 생성된 기본 Latency 측정값으로 설정합니다. the definition of Measure에서 세부 정보를 참조하세요. (예: --measure Latency)
  5. --test 옵션을 percentage 임계값으로 설정합니다. 전체 개요는 Thresholds & Alerts를 참조하세요. (예: --test t-test)
  6. 상한선을 0.25(즉, 25%)로 설정하는 --upper-boundary 옵션을 설정합니다. 전체 개요는 Thresholds & Alerts를 참조하세요. (예: --upper-boundary 0.25)
  7. 프로젝트 인수를 Save Walter White 프로젝트 슬러그로 지정합니다. (예: save-walter-white-1234abcd)

그런 다음, CI에서 git을 사용하여 feature-branch 브랜치를 체크아웃해야 합니다:

git checkout feature-branch

마지막으로, CI에서 feature-branch 벤치마크를 실행할 준비가 되었습니다:

bencher run \
--project save-walter-white-1234abcd \
--branch feature-branch \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. bencher run CLI 서브커맨드를 사용하여 feature-branch 벤치마크를 실행합니다. 전체 개요는 the bencher run CLI subcommand를 참조하십시오. (예: bencher run)
  2. --project 옵션을 프로젝트 슬러그로 설정합니다. 자세한 사항은 the --project docs를 참조하십시오. (예: --project save-walter-white-1234abcd)
  3. --branch 옵션을 기능 브랜치 이름으로 설정합니다. 전체 개요는 branch selection을 참조하십시오. (예: --branch feature-branch)
  4. --testbed 옵션을 Testbed 이름으로 설정합니다. 자세한 사항은 the --tested docs를 참조하십시오. (예: --testbed ci-runner)
  5. 원하는 벤치마크 하네스 어댑터를 --adapter 옵션으로 설정합니다. 전체 개요는 benchmark harness adapters을 참조하십시오. (예: --adapter json)
  6. 경고가 생성되면 명령어가 실패하도록 --err 플래그를 설정합니다. 전체 개요는 Threshold & Alerts를 참조하십시오. (예: --err)
  7. 벤치마크 명령 인수를 지정합니다. 전체 개요는 benchmark command를 참조하십시오. (예: bencher mock)

CI에서 이 명령이 실행될 때마다, feature-branch의 결과를 main에서 발생한 가장 최근의 결과와만 비교합니다.



🐰 축하합니다! Bencher로 CI에서 벤치마크를 추적하는 방법을 배웠습니다! 🎉


GitHub Actions에 Bencher 추가하기 ➡

GitLab CI/CD에 Bencher 추가하기 ➡

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


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Mon, April 1, 2024 at 7:00:00 AM UTC