クイックスタート


Bencherとは何ですか?

Bencherは、連続ベンチマーキングツールのスイートです。 パフォーマンスの後退があなたのユーザーに影響を与えたことはありますか? Bencherなら、それが起こるのを防げた可能性があります。 Bencherは、パフォーマンスの低下を_productionに到達する_前に検出し、防止することを可能にします。

  • 実行: お気に入りのベンチマーキングツールを使用してベンチマークをローカルまたはCIで実行します。 bencher CLIは単にあなたの既存のベンチマークハーネスをラップし、その結果を保存します。
  • 追跡: ベンチマークの結果を時間と共に追跡します。ソースブランチ、テストベッド、測定基準に基づいてBencherのWebコンソールを使用して結果を監視、クエリ、グラフ化します。
  • キャッチ: CIでパフォーマンスの後退をキャッチします。Bencherは最先端のカスタマイズ可能な分析を使用して、パフォーマンスの後退がProductionに到達する前にそれを検出します。

機能の後退を防ぐためにユニットテストがCIで実行されるのと同じ理由で、Bencherを使用してCIでベンチマークを実行してパフォーマンスの後退を防ぐべきです。パフォーマンスのバグはバグです!


bencher CLIのインストール

Linux、Mac、およびUnix

Linux、Mac、およびその他のUnix系システムでは、ターミナルで以下を実行します:

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

🐰 このシステムではスクリプトの実行が無効化されていますというエラーが表示される場合:

  • 管理者として実行Powershellを開く
  • 以下を実行: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • 次に入力: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コンソールに移動します。 右上隅のあなたの名前の上にマウスを持って行きます。 ドロップダウンメニューが表示されるはずです。Tokensを選択します。 APIトークンページに移動したら、➕ Addボタンをクリックします。

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 list

以下のような結果が表示されます:

$ bencher org list
[
{
"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のタイムスタンプは、あなたが登録した時刻になります

では、その組織内に新しいプロジェクトを作成できます。 以下のコマンドのorganization引数に、組織のslug(つまり、YOUR_ORG_SLUG)を代入します。

実行:bencher project create YOUR_ORG_SLUG --name "Save Walter White" --url http://www.savewalterwhite.com

以下のような結果を見るはずです:

$ bencher project create saul-goodman --name "Save Walter White" --url http://www.savewalterwhite.com
{
"organization": "4581feb0-6cac-40a9-bd8a-d7865183b01e",
"name": "Save Walter White",
"slug": "save-walter-white-1234abcd",
"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-1234abcd)を記録しておいてください。


レポートを実行する

ついにベンチマークのメトリックを収集する準備が整いました! このチュートリアルでは簡単のため、モックデータを使用します。

実行: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
}
}
}

あなたの出力は上記の結果と少し異なるはずです、なぜならデータは疑似ランダムだからです。 大切なのは、このコマンドが動作することです。


では、モックのベンチマークメトリックデータを使用してレポートを実行してみましょう。 下記のコマンドの--project引数に、プロジェクトslug(つまり、YOUR_PROJECT_SLUG)を代入します。

実行:bencher run --project YOUR_PROJECT_SLUG "bencher mock"

以下のような結果が表示されます:

$ bencher run save-walter-white-1234abcd "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-1234abcd/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-1234abcd/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-1234abcd/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-1234abcd/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-1234abcd/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-1234abcd

その後、次のように実行してください: echo $BENCHER_PROJECT

以下のように表示されます:

$ echo $BENCHER_PROJECT
save-walter-white-1234abcd

同じコマンドをもう一度--projectなしで実行し、さらにデータを生成します。

実行: bencher run "bencher mock"


さらにデータを生成しますが、今度は結果をbencher runにパイプします。

実行: bencher mock | bencher run


時々、結果をファイルに保存し、bencher runでそれらを取得したいことがあります。

実行: bencher run --file results.json "bencher mock > 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-1234abcd/alerts/b2329d5a-4471-48ab-bfbd-959d46ba1aa6
- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/181b1cf5-d984-402a-b0f1-68f6f119fa66
- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b9b6c904-c657-4908-97db-dbeca40f8782
- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/5567ff32-2829-4b6a-969a-af33ce3828db
- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/49f2768f-ccda-4933-8e1d-08948f57a74d

ブラウザで各ベンチマークのアラートを見ることができます。 View alertsからリンクをクリックするか、コピーしてペーストします。


🐰 ヒント: パフォーマンスリグレッションがどのように検出されるかの全体像を把握するため、閾値&アラートドキュメントをチェックしてください!



🐰 おめでとうございます!初めてのパフォーマンスリグレッションを捕まえました!🎉


続けていく:ベンチマーキングの概要 ➡

🤖 このドキュメントは OpenAI GPT-4 によって自動的に生成されました。 正確ではない可能性があり、間違いが含まれている可能性があります。 エラーを見つけた場合は、GitHub で問題を開いてください。.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Wed, March 27, 2024 at 7:50:00 AM UTC