ベンチマークハーネスアダプター


アダプタはベンチマークハーネスの出力を Bencher Metric Format (BMF) JSON に変換します。 新しいレポートが受け取られた時、アダプタはAPIサーバー上で実行されます。 詳細についてはベンチマーキングの概要を参照してください。 アダプタはbencher run CLIサブコマンド--adapter オプションを使用して指定することができます。 アダプタが指定されていない場合、デフォルトのmagic アダプタが使用されます。

🪄 マジック (デフォルト)

Magicアダプター(magic)は、他のすべてのアダプターのスーパーセットです。 そのため、bencher runのデフォルトアダプターとなっています。 ただし、magicアダプターは探索用途のみに使用すべきです。

最適な結果を得るためには、ベンチマークハーネスアダプターを指定するべきです:


{…} JSON

JSON アダプタ(json)は、Bencher Metric Format (BMF) JSONを期待しています。 これは、カスタムベンチマークハーネスをBencherと統合するのに最適です。 詳細については、カスタムベンチマークの追跡方法BMF JSON リファレンスをご覧ください。

Terminal window
bencher run --adapter json "bencher mock"

⏱️ ビルド時間

bencher run CLI サブコマンドを使用して、--build-time フラグを指定することで、成果物のビルド時間(すなわちコンパイル時間)を追跡できます。内部的には、bencher run は結果を Bencher Metric Format (BMF) JSON として出力します。したがって、明示的に the json adapter を使用することが推奨されます。詳細については、ビルド時間を追跡する方法 を参照してください。

build-time 測定値(すなわち 秒 (s))が収集されます。ビルド時間の値(すなわち value)のみが利用可能です。lower_valueupper_value は収集されません。build-time 測定値はすべてのプロジェクトにデフォルトで作成されるわけではありません。しかし、--build-time フラグを使用する場合、この測定値は自動的にプロジェクトに作成されます。

Terminal window
bencher run --adapter json --build-time "echo 0 > binary"

⚖️ ファイルサイズ

bencher run CLIサブコマンドは、--file-size オプションを使用して、納品物のファイルサイズ(つまりバイナリーサイズ)を追跡するために使用できます。--file-size オプションは、サイズが測定されるファイルのファイルパスを期待します。内部的に、bencher runは結果をBencher Metric Format (BMF) JSONとして出力します。したがって、明示的にthe json adapterを使用することが良い習慣です。詳細については、ファイルサイズを追跡する方法を参照してください。

file-size 測定(つまり bytes (B))が収集されます。利用可能なのはファイルサイズ値(つまり value)のみです。lower_valueupper_value は収集されません。file-size 測定は、すべてのプロジェクトにデフォルトで作成されるわけではありません。しかし、--file-size オプションを使用した場合、この測定はプロジェクトに自動的に作成されます。 --file-sizeオプションは、複数回使用して複数のファイルサイズを追跡することができます。

Terminal window
bencher run --adapter json --file-size binary "echo 0 > binary"

#️⃣ C# DotNet

C# DotNet アダプター (c_sharp_dot_net) は、BenchmarkDotNet の出力を JSON フォーマット(例 --exporters json で期待しています。 latency 測定値(例 nanoseconds (ns))が収集されます。 この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run CLI の --file 引数を使用する必要があります。

Terminal window
bencher run --adapter c_sharp_dot_net --file results.json "dotnet run --exporters json --filter '*'"

メトリックには2つのオプションがあります:

  • mean (デフォルト): lower_valueupper_value はそれぞれ平均(value)より1標準偏差下と上です。
  • median: lower_valueupper_value はそれぞれ中央値(value)より1四分位範囲下と上です。

これは、--average オプションを使用して bencher run CLI サブコマンドで指定できます。


➕ C++ Catch2

C++ Catch2 アダプター(cpp_catch2)は Catch2 の出力を期待しています。 latency メジャー(すなわち ナノ秒 (ns))が収集されます。 lower_valueupper_value は、それぞれ平均値(すなわち value)よりも一つの標準偏差以下と上です。

Terminal window
bencher run --adapter cpp_catch2 "make benchmarks"

➕ C++ Google

C++ Googleアダプター(cpp_google)は、Google Benchmarkの出力をJSON形式(すなわち--benchmark_format=jsonで受け取ることを期待しています。 latency測定値(すなわちナノ秒(ns))が収集されます。 平均値(すなわちvalue)のみが利用可能です。lower_valueupper_valueはありません。

Terminal window
bencher run --adapter cpp_google "make benchmarks --benchmark_format=json"

🕳 Goベンチ

Go Benchアダプター (go_bench) は go test -bench の出力を期待しています。 latency 測定値(すなわち ナノ秒 (ns))が収集されます。 value(すなわち平均値)のみが利用可能です。lower_valueupper_value はありません。

Terminal window
bencher run --adapter go_bench "go test -bench"

☕️ Java JMH

Java JMH アダプター (java_jmh) は、Java Microbenchmark Harness (JMH) の出力を JSON形式 (つまり -rf json)で期待しています。 この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run CLI の --file 引数を使用する必要があります。 latencythroughput の測定値(つまり ナノ秒 (ns)秒間操作数 (ops/sec))が収集されることがあります。 lower_valueupper_value は、それぞれ平均(つまり value)の下限および上限の信頼区間です。

Terminal window
bencher run --adapter java_jmh --file results.json "java -jar benchmarks.jar -rf json -rff results.json"

🕸 JavaScript ベンチマーク

JavaScript ベンチマークアダプター(js_benchmark)は Benchmark.js の出力を期待しています。 throughput 測定 (つまり operations / second (ops/sec))が収集されます。 lower_valueupper_value はそれぞれ中央値(つまり value)より下と上の相対的な誤差の幅です。

Terminal window
bencher run --adapter js_benchmark "node benchmarks.js"

🕸 JavaScript 時間

JavaScript 時間アダプタ (js_time) は console.time/console.timeEnd の出力を期待しています。 latency 測定値(つまり ナノ秒 (ns))が収集されます。 利用可能なのは操作時間(つまり value)のみで、lower_valueupper_value はありません。

Terminal window
bencher run --adapter js_time "node benchmarks.js"

🐍 Python ASV

Python ASV アダプター (python_asv) は airspeed velocity CLI asv run の出力を想定しています。 latency 測定値(つまり ナノ秒 (ns))が収集されます。 lower_valueupper_value は、それぞれ中央値(つまり value)の下と上の四分位範囲です。

Terminal window
bencher run --adapter python_asv "asv run"

🐍 Python Pytest

Python Pytest アダプタ (python_pytest) は、pytest-benchmark の出力を JSON 形式 (つまり --benchmark-json results.json) で期待します。 この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run CLI の --file 引数を使用する必要があります。 latency 測定(つまり ナノ秒 (ns))が収集されます。

Terminal window
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"

メトリックには2つのオプションがあります:

  • mean (デフォルト):lower_valueupper_value はそれぞれ平均値 (つまり value) の1標準偏差以下と上になります。
  • medianlower_valueupper_value はそれぞれ中央値 (つまり value) の1四分位範囲以下と上になります。

これは、オプションの --average 引数を使用して bencher run CLI サブコマンドで指定できます。


♦️ Ruby ベンチマーク

Ruby ベンチマークアダプター(ruby_benchmark)は、#bm#bmbm、そして #benchmark メソッドの出力としてBenchmark モジュールを期待しています。 各ベンチマークにはラベルが必要です。 latency 測定値(つまり ナノ秒 (ns))が収集されます。 報告された値(つまり value)のみが利用可能です。lower_valueupper_value はありません。

Terminal window
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"

🦀 Rust Bench

Rust Bench アダプタ (rust_bench) は libtest bench の出力を想定しています。 latency 測定値(つまり nanoseconds (ns))が収集されます。 lower_valueupper_value はそれぞれ中央値(つまり value)より下と上の偏差です。

Terminal window
bencher run --adapter rust_bench "cargo +nightly bench"

🦀 Rust Criterion

Rust Criterionアダプター (rust_criterion) はCriterionの出力を期待しています。 latency 測定(つまり ナノ秒 (ns))が収集されます。 lower_valueupper_value は、利用可能な場合は傾き、そうでない場合は平均(つまり value)のそれぞれ下限と上限です。

Terminal window
bencher run --adapter rust_criterion "cargo bench"

🦀 Rust Iai

Rust Iai アダプター(rust_iai)はIaiの出力を想定しています。 instructionsl1-accessesl2-accessesram-accessesestimated-cyclesのメジャーが収集されます。 これらのメジャー(つまりvalue)のみが利用可能です。lower_valueupper_valueのメジャーはありません。 このアダプターのメジャーは、すべてのプロジェクトについてデフォルトで作成されるわけではありません。 しかし、このアダプターを使用すると、これらのメジャーがプロジェクトに自動的に作成されます。

Terminal window
bencher run --adapter rust_iai "cargo bench"

🦀 Rust Iai-Callgrind

RustのIaiアダプタ(rust_iai_callgrind)は、Iai-Callgrindの出力を期待します。 instructionsl1-hitsl2-hitsram-hitstotal-read-write、そしてestimated-cyclesの測定値が収集されます。 これらの測定値(つまりvalue)のみが利用可能です。lower_valueupper_valueの測定値はありません。 このアダプタのための測定値は、すべてのプロジェクトに対してデフォルトで作成されるわけではありません。 しかし、このアダプタを使用する場合、これらの測定値はあなたのプロジェクトのために自動的に作成されます。

Terminal window
bencher run --adapter rust_iai_callgrind "cargo bench"

❯_️ Shell Hyperfine

Shell Hyperfineアダプター (shell_hyperfine) は、Hyperfine の出力を JSON形式(例: --export-json results.jsonで期待しています。このJSON出力はファイルに保存されるので、そのファイルパスを指定するために bencher run CLIの --file 引数を使用する必要があります。 latency 測定項目では、(例:nanoseconds (ns))が収集されます。

Terminal window
bencher run --adapter shell_hyperfine --file results.json "hyperfine --export-json results.json 'sleep 0.1'"

メトリックには2つのオプションがあります:

  • mean(デフォルト):lower_valueupper_value は、それぞれ平均値(value)よりも1標準偏差下と上にあります。
  • medianlower_valueupper_value は、それぞれ minmax の値です。

これは、bencher run CLI サブコマンドで --average オプションを使用して指定できます。



🐰 おめでとう! ベンチマークハーネスアダプターについてすべて学びました! 🎉


続きを読む: 条件付きベンチマーキング ➡

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


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Thu, May 9, 2024 at 5:17:00 PM UTC