빠른 시작
Bencher가 무엇인가요?
Bencher는 지속적인 벤치마킹 도구 모음입니다. 성능 성하위가 사용자에게 영향을 미친 적이 있나요? Bencher를 사용하면 그런 현상을 막을 수 있습니다. Bencher를 사용하면 성능 성하위를 _제작환경에 도입하기 _전에 탐지하고 방지할 수 있습니다.
- 실행: 벤치마킹 도구를 이용하여 로컬이나 CI에서 벤치마크를 실행하세요.
bencher
CLI는 기존의 벤치마크 하네스를 감싸고 그 결과를 저장합니다. - 추적: 벤치마크 결과를 시간에 따라 추적하세요. 소스 브랜치, 테스트베드, 메트릭 종류 등에 따라 Bencher 웹 콘솔을 이용하여 결과를 감시하고, 쿼리하고, 그래프로 표현하세요.
- 탐지: CI에서 성능 성하위를 탐지하세요. Bencher는 최신, 커스터마이징 가능한 분석을 사용해 성능 성하위를 제작환경에 도입되기 전에 검출합니다.
기능 성하위를 방지하기 위해 CI에서 단위 테스트를 실행하는 이유와 마찬가지로, Bencher를 사용하여 CI에서 벤치마크를 실행하여 성능 성하위를 방지해야 합니다. 성능 버그도 버그입니다!
bencher
CLI 설치
bencher
CLI를 설치하려면 cargo
가 설치되어 있어야 합니다. cargo
가 설치되어 있는지 확인하세요.
실행: cargo --version
다음과 같은 내용이 나와야 합니다:
$ cargo --version
cargo 1.65.0 (4bc8f24d3 2022-10-20)
버전 번호가 다르더라도 괜찮습니다. 이 명령이 작동하는 것이 중요합니다.
그렇지 않을 경우, rustup
을 통해 cargo
를 설치하는 방법을 따르세요.
Linux나 macOS에서는 다음을 실행하세요:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo
가 설치되어 있다면, 이제 bencher
CLI를 설치할 수 있습니다.
실행:
cargo install --git https://github.com/bencherdev/bencher --tag v0.3.18 --locked bencher_cli
다음과 같은 내용이 나와야 합니다:
$ cargo install --git https://github.com/bencherdev/bencher --tag 0.3.18 --locked bencher_cli
Installing bencher_cli v0.3.18 (/workspace/bencher/services/cli)
Updating crates.io index
…
Finished release [optimized] target(s) in 0.27s
Installing /workspace/.cargo/bin/bencher
Installed package `bencher_cli v0.3.18 (/workspace/bencher/services/cli)` (executable `bencher`)
마찬가지로 출력 결과가 다르더라도 괜찮습니다. 이 명령이 작동하는 것이 중요합니다.
마지막으로, bencher
CLI가 설치되었는지 확인해봅시다.
실행: bencher --version
다음을 볼 수 있어야 합니다:
$ bencher —version
bencher 0.3.18
Bencher Cloud 계정 생성
Bencher는 오픈 소스이며 호스팅이 가능합니다. 자체 호스팅에 관심이 있다면, Bencher Docker 튜토리얼을 확인하세요. 그러나 이 튜토리얼에서는 Bencher Cloud를 사용하겠습니다.
Bencher Cloud에 가입
계정을 만든 후에는 이메일 주소를 확인해야 합니다. 확인 링크를 위해 이메일을 확인하세요. 그러면 Bencher Cloud에 로그인되어 있어야 합니다.
API 토큰 생성
Bencher API를 사용하려면 API 토큰을 만들어야 합니다.
Bencher 콘솔로 이동하세요.
오른쪽 상단에 있는 이름 위로 마우스를 올립니다.
드롭다운 메뉴가 나타납니다. Tokens
를 선택하세요.
API 토큰 페이지에서 ➕ Add
버튼을 클릭합니다.
API 토큰 추가
새 API 토큰을 생성한 후에는 클립보드에 복사해야 합니다. 작업하려는 터미널에서 API 토큰을 환경 변수로 내보냅니다.
실행: export BENCHER_API_TOKEN=YOUR_TOKEN
그런 다음 다음을 실행하면: echo $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
는 의사무작위입니다name
와slug
는 이름에 기반합니다created
와modified
타임스탬프는 당신이 방금 가입했을 때부터 시작됩니다
이제 조직 내에 새 프로젝트를 생성할 수 있습니다.
아래 명령에서 조직의 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": [
[
{
"metric_kind": { ... },
"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?metric_kinds=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?metric_kinds=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?metric_kinds=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?metric_kinds=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?metric_kinds=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
링크를 클릭하거나 복사해서 붙여넣기하세요.
🐰 팁: 성능 성하위가 어떻게 검출되는지에 대한 전체 개요를 보려면 임계값 & 알림 문서를 확인하세요!
🐰 축하합니다! 첫 번째 성능 성하위를 잡았습니다! 🎉