빠른 시작


Bencher가 무엇인가요?

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

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

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


bencher CLI 설치하기

Linux, Mac, & Unix

Linux, Mac, 그리고 Unix-like 시스템은 터미널에서 다음을 실행하세요:

Terminal window
curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh

Windows

Windows 시스템에서는 PowerShell 터미널에서 다음을 실행하세요:

Terminal window
irm https://bencher.dev/download/install-cli.ps1 | iex

🐰 만약 running scripts is disabled on this system이라는 오류 메세지가 나타나면:

  • 관리자 권한으로 Powershell 열기
  • Run: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • Enter: Y
  • 이 스크립트를 다시 실행하세요

추가 설치 옵션은 bencher CLI 설치 방법에서 확인하실 수 있습니다.

이제 우리가 bencher CLI를 설치했는지 테스트해봅시다.

다음을 실행하세요: bencher --version

이러한 내용을 보실 수 있습니다:

$ bencher --version
bencher 0.3.26

Bencher Cloud 계정 생성

Bencher는 오픈 소스이며 호스팅이 가능합니다. 자체 호스팅에 관심이 있다면, Bencher Docker 튜토리얼을 확인하세요. 그러나 이 튜토리얼에서는 Bencher Cloud를 사용하겠습니다.

Bencher Cloud에 가입


계정을 만든 후에는 이메일 주소를 확인해야 합니다. 확인 링크를 위해 이메일을 확인하세요. 그러면 Bencher Cloud에 로그인되어 있어야 합니다.


API 토큰 생성하기

Bencher API를 사용하려면 API 토큰을 생성해야 합니다. Bencher Console로 이동하세요. 오른쪽 상단에 있는 성함 부분에 마우스를 올려놓으세요. 드롭다운 메뉴가 나타날 것입니다. 토큰들을 선택하세요. API 토큰 페이지에 도착하면, ➕ 추가 버튼을 클릭하세요.

API 토큰 추가하기


새로운 API 토큰을 생성하면, 클립보드에 복사해야 합니다. 작업할 터미널에서 API 토큰을 환경 변수로 내보냅니다.

Linux, Mac 그리고 Unix 계열의 시스템에서 실행하세요: export BENCHER_API_TOKEN=YOUR_TOKEN

Windows에서 실행하세요: $env:BENCHER_API_TOKEN = "YOUR_TOKEN"

그 다음 echo $BENCHER_API_TOKEN 또는 Write-Output $env:BENCHER_API_TOKEN을 실행하세요.

다음을 볼 수 있을 것입니다:

$ echo $BENCHER_API_TOKEN
YOUR_TOKEN

🐰 참고: 다른 터미널로 이동하면 API 토큰을 다시 내보내야 합니다.


프로젝트 생성

이제 사용자 계정과 API 토큰이 있으므로 프로젝트를 생성할 수 있습니다. 먼저 새 프로젝트가 속할 조직을 알아야 합니다.

실행: bencher org ls

다음과 같은 내용이 나와야 합니다:

$ bencher org ls
[
{
"name": "Saul Goodman",
"slug": "saul-goodman",
"uuid": "4581feb0-6cac-40a9-bd8a-d7865183b01e"
"created": "2022-07-06T11:24:36Z",
"modified": "2022-07-06T11:24:36Z"
}
]

당신의 출력 결과는 위의 출력 결과와 약간 다르게 나올 것입니다:

  • uuid는 의사무작위입니다
  • nameslug는 이름에 기반합니다
  • createdmodified 타임스탬프는 당신이 방금 가입했을 때부터 시작됩니다

이제 조직 내에 새 프로젝트를 생성할 수 있습니다. 아래 명령에서 조직의 slug--org 인수로 대체합니다 (예: YOUR_ORG_SLUG).

실행: bencher project create --org YOUR_ORG_SLUG --url http://www.savewalterwhite.com "Save Walter White"

다음과 같은 내용이 나와야 합니다:

$ bencher project create --org saul-goodman --url http://www.savewalterwhite.com "Save Walter White"
{
"organization": "4581feb0-6cac-40a9-bd8a-d7865183b01e",
"name": "Save Walter White",
"slug": "save-walter-white-12345",
"uuid": "c6c2a8e8-685e-4413-9a19-5b79053a71b1"
"url": "http://www.savewalterwhite.com",
"public": true,
"created": "2022-07-06T11:36:24Z",
"modified": "2022-07-06T11:36:24Z"
}

다시 한 번, 당신의 출력 결과는 위의 출력 결과와 약간 다르게 나올 것입니다. 이 명령이 작동하는 것이 중요합니다. 프로젝트의 slug 필드 (예: save-walter-white-12345)를 기억해두세요.


보고서 실행

드디어 벤치마크 정보를 수집할 준비가 되었습니다! 이 튜토리얼에서는 간단하게 하기 위해 가짜 데이터를 사용하겠습니다.

실행: bencher mock

다음과 같은 내용이 나와야 합니다:

$ bencher mock
{
"bencher::mock_0": {
"latency": {
"value": 3.7865423396154463,
"lower_value": 3.4078881056539014,
"upper_value": 4.165196573576991
}
},
"bencher::mock_1": {
"latency": {
"value": 16.398332128878437,
"lower_value": 14.758498915990593,
"upper_value": 18.03816534176628
}
},
"bencher::mock_2": {
"latency": {
"value": 20.88091359871672,
"lower_value": 18.792822238845048,
"upper_value": 22.969004958588393
}
},
"bencher::mock_3": {
"latency": {
"value": 33.88103801203782,
"lower_value": 30.492934210834036,
"upper_value": 37.2691418132416
}
},
"bencher::mock_4": {
"latency": {
"value": 40.90515638867921,
"lower_value": 36.81464074981129,
"upper_value": 44.99567202754713
}
}
}

당신의 출력 결과는 위의 출력 결과와 약간 다르게 나올 것입니다, 데이터는 의사무작위입니다. 이 명령이 작동하는 것이 중요합니다.


이제 가짜 벤치마크 메트릭 데이터를 사용하여 보고서를 실행해 보겠습니다. 아래 명령에서 프로젝트의 slug--project 인수로 대체합니다 (예: YOUR_PROJECT_SLUG).

실행: bencher run --project YOUR_PROJECT_SLUG "bencher mock"

다음과 같은 내용이 나와야 합니다:

$ bencher run --project save-walter-white-12345 "bencher mock"
{
"bencher::mock_0": {
"latency": {
"value": 0.15496641529475275,
"lower_value": 0.13946977376527747,
"upper_value": 0.17046305682422802
}
},
"bencher::mock_1": {
"latency": {
"value": 18.648298578180437,
"lower_value": 16.783468720362393,
"upper_value": 20.513128435998482
}
},
"bencher::mock_2": {
"latency": {
"value": 28.20328182167366,
"lower_value": 25.382953639506294,
"upper_value": 31.023610003841025
}
},
"bencher::mock_3": {
"latency": {
"value": 34.45732560787596,
"lower_value": 31.01159304708836,
"upper_value": 37.903058168663556
}
},
"bencher::mock_4": {
"latency": {
"value": 44.9237520767597,
"lower_value": 40.43137686908373,
"upper_value": 49.41612728443567
}
}
}
{
"branch": "master",
"end_time": "2023-07-18T14:21:27.796871Z",
"results": [
"{\n \"bencher::mock_0\": {\n \"latency\": {\n \"value\": 0.15496641529475275,\n \"lower_value\": 0.13946977376527747,\n \"upper_value\": 0.17046305682422802\n }\n },\n \"bencher::mock_1\": {\n \"latency\": {\n \"value\": 18.648298578180437,\n \"lower_value\": 16.783468720362393,\n \"upper_value\": 20.513128435998482\n }\n },\n \"bencher::mock_2\": {\n \"latency\": {\n \"value\": 28.20328182167366,\n \"lower_value\": 25.382953639506294,\n \"upper_value\": 31.023610003841025\n }\n },\n \"bencher::mock_3\": {\n \"latency\": {\n \"value\": 34.45732560787596,\n \"lower_value\": 31.01159304708836,\n \"upper_value\": 37.903058168663556\n }\n },\n \"bencher::mock_4\": {\n \"latency\": {\n \"value\": 44.9237520767597,\n \"lower_value\": 40.43137686908373,\n \"upper_value\": 49.41612728443567\n }\n }\n}\n"
],
"settings": {},
"start_time": "2023-07-18T14:21:27.773930Z",
"testbed": "base"
}
{
"uuid": "5554a92c-6f5c-481d-bd47-990f0a9bac6d",
"user": { ... },
"project": { ... },
"branch": { ... },
"testbed": { ...},
"start_time": "2023-07-18T14:21:27Z",
"end_time": "2023-07-18T14:21:27Z",
"adapter": "magic",
"results": [
[
{
"measure": { ... },
"threshold": null,
"benchmarks": [ ... ]
}
]
],
"alerts": [],
"created": "2023-07-18T14:21:27Z"
}
View results:
- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-12345/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=88375e7c-f1e0-4cbb-bde1-bdb7773022ae
- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-12345/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=e81c7863-cc4b-4e22-b507-c1e238871137
- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-12345/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=31dede44-d23a-4baf-b639-63f2ac742e42
- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-12345/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=c7e32369-f3dd-473d-99a3-6289ae32b38e
- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-12345/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=779bc477-4964-4bae-aa8c-4da3e388822c

이제 각 벤치마크의 결과를 브라우저에서 볼 수 있습니다. View results 링크를 클릭하거나 복사해서 붙여넣기하세요. 각 벤치마크에 대해서는 단일 데이터 점만 있으므로, 데이터를 더 추가합시다!


먼저 프로젝트 슬러그를 환경 변수로 설정하여, 모든 실행에서 --project를 제공하지 않아도 되도록 합시다.

실행: export BENCHER_PROJECT=save-walter-white-12345

그런 다음 다음을 실행하면: echo $BENCHER_PROJECT

다음을 볼 수 있어야 합니다:

$ echo $BENCHER_PROJECT
save-walter-white-12345

다시 한번 --project 없이 동일한 명령을 실행하여 더 많은 데이터를 생성하겠습니다.

실행: bencher run "bencher mock"


이번에는 결과를 bencher run으로 파이프하여 더 많은 데이터를 생성해 보겠습니다.

실행: bencher mock | bencher run


가끔 결과를 파일에 저장하고 bencher run이 결과를 가져오게 하고 싶을 수도 있습니다.

실행: bencher run "bencher mock > results.json" --file results.json


또한 다른 프로세스가 벤치마크를 실행하고 결과를 파일에 저장하도록 하고, bencher run이 그 결과를 가져오도록 만들 수도 있습니다.

실행: bencher mock > results.json && bencher run --file results.json


마지막으로, bencher run--iter 인수를 사용하여 많은 데이터를 생성합시다.

실행: bencher run --iter 16 "bencher mock"


🐰 팁: bencher run CLI 서브커맨드 문서에서 bencher run이 할 수 있는 모든 것에 대한 전체 개요를 확인하세요!


알림 생성

이제 벤치마크에 대한 히스토리 데이터가 있으니, 알림을 생성해 봅시다! 알림은 벤치마크 결과가 성능 성하위로 판단되었을 때 생성됩니다. 그럼 성능 성하위를 시뮬레이션해봅시다!

실행: bencher run "bencher mock --pow 8"


출력 결과의 끝 부분에 새로운 섹션인 View alerts가 있어야 합니다:

View alerts:
- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-12345/alerts/b2329d5a-4471-48ab-bfbd-959d46ba1aa6
- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-12345/alerts/181b1cf5-d984-402a-b0f1-68f6f119fa66
- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-12345/alerts/b9b6c904-c657-4908-97db-dbeca40f8782
- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-12345/alerts/5567ff32-2829-4b6a-969a-af33ce3828db
- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-12345/alerts/49f2768f-ccda-4933-8e1d-08948f57a74d

이제 각 벤치마크의 알림을 브라우저에서 볼 수 있습니다. View alerts 링크를 클릭하거나 복사해서 붙여넣기하세요.


🐰 팁: 성능 성하위가 어떻게 검출되는지에 대한 전체 개요를 보려면 임계값 & 알림 문서를 확인하세요!



🐰 축하합니다! 첫 번째 성능 성하위를 잡았습니다! 🎉


계속 진행: 벤치마킹 개요 ➡

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