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


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

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

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

통계적 연속 벤치마킹

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

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

먼저, 우리의 CI 러너를 나타낼 새로운 테스트베드를 만들어야 합니다. 적절히 ci-runner로 명명합니다.

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

다음으로, 우리의 ci-runner 테스트베드를 위한 새로운 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 서브 명령어를 사용하세요. 자세한 내용은 Threshold 생성 문서를 참조하세요. (예: bencher threshold create)
  2. --branch 옵션을 기본 main 브랜치로 설정하세요. (예: --branch main)
  3. --branch 옵션을 새로운 ci-runner 테스트베드로 설정하세요. (예: --testbed ci-runner)
  4. --measure 옵션을 bencher mock이 생성한 내장 지연 측정값으로 설정하세요. 자세한 내용은 측정값 정의를 참조하세요. (예: --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의 연속 벤치마킹을 참조하세요.

우리는 main 브랜치의 모든 변경 사항을 CI에서 벤치마킹하여 역사적 기준선을 설정하고 유지 관리해야 합니다:

bencher run \
--project save-walter-white-1234abcd \
--branch main \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. bencher run CLI 서브 명령어를 사용하여 feature-branch 브랜치 벤치마크를 실행하세요. 자세한 내용은 bencher run CLI 서브 명령어를 참조하세요. (예: bencher run)
  2. --project 옵션을 프로젝트 슬러그로 설정하세요. 자세한 내용은 프로젝트 옵션를 참조하세요. (예: --project save-walter-white-1234abcd)
  3. --branch 옵션을 기본 브랜치 이름으로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예: --branch main)
  4. --testbed 옵션을 테스트베드 이름으로 설정하세요. 자세한 내용은 테스트베드 옵션를 참조하세요. (예: --testbed ci-runner)
  5. --adapter 옵션을 원하는 벤치마크 하네스 어댑터로 설정하세요. 자세한 내용은 벤치마크 하네스 어댑터를 참조하세요. (예: --adapter json)
  6. 경고가 발생하면 명령을 실패시키도록 --err 플래그를 설정하세요. 자세한 내용은 Threshold & Alerts를 참조하세요. (예: --err)
  7. 벤치마크 명령어 인수를 지정하세요. 자세한 내용은 벤치마크 명령어를 참조하세요. (예: 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 \
--branch-reset \
--testbed ci-runner \
--adapter json \
--err \
bencher mock
  1. bencher run CLI 서브 명령어를 사용하여 feature-branch 브랜치 벤치마크를 실행하세요. 자세한 내용은 bencher run CLI 서브 명령어를 참조하세요. (예: bencher run)
  2. --project 옵션을 프로젝트 슬러그로 설정하세요. 자세한 내용은 프로젝트 옵션를 참조하세요. (예: --project save-walter-white-1234abcd)
  3. --branch 옵션을 기능 브랜치 이름으로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예: --branch feature-branch)
  4. --branch-start-point 옵션을 기능 브랜치 시작 지점으로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예: --branch-start-point main)
  5. --branch-start-point-hash 옵션을 기능 브랜치 시작 지점의 git 해시로 설정하세요. 자세한 내용은 브랜치 선택를 참조하세요. (예: --branch-start-point-hash 32ae...dd8b)
  6. 항상 브랜치를 시작 지점으로 재설정하도록 --branch-reset 플래그를 설정하세요. 이는 벤치마크 데이터 이동을 방지합니다. 자세한 내용은 브랜치 선택를 참조하세요. (예: --branch-reset)
  7. --testbed 옵션을 테스트베드 이름으로 설정하세요. 자세한 내용은 테스트베드 옵션를 참조하세요. (예: --testbed ci-runner)
  8. 원하는 벤치마크 하네스 어댑터로 --adapter 옵션을 설정하세요. 자세한 내용은 벤치마크 하네스 어댑터를 참조하세요. (예: --adapter json)
  9. 경고가 발생하면 명령을 실패시키도록 --err 플래그를 설정하세요. 자세한 내용은 Threshold & Alerts를 참조하세요. (예: --err)
  10. 벤치마크 명령어 인수를 지정하세요. 자세한 내용은 벤치마크 명령어를 참조하세요. (예: bencher mock)

CI에서 이 명령이 처음 실행되면, 아직 존재하지 않는 feature-branch 브랜치를 생성합니다. 새로운 feature-branchmain 브랜치를 해시 32aea434d751648726097ed3ac760b57107edd8b 지점에서 시작 지점으로 사용합니다. 이는 feature-branch가 모든 데이터와 Thresholdsmain 브랜치에서 복사하여 첫 번째 및 모든 후속 실행에서 bencher mock 결과를 비교할 수 있게 합니다.

상대적 연속 벤치마킹

빠른 시작도커 자체 호스팅 튜토리얼에서 이어서, 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: Thu, August 22, 2024 at 12:45:00 PM UTC