ベンチマークハーネスアダプター
アダプターは、ベンチマークハーネスの出力を標準化されたJSON、Bencherメトリックフォーマット(BMF)に変換します。
アダプターは、新しいレポートが受け取られたときにAPIサーバー上で実行されます。
より深い説明のために、ベンチマークの概観を参照してください。
それらは、オプションの--adapter
フラグを使用したbencher run
CLIサブコマンドで指定できます。
アダプターが指定されていない場合、デフォルトでthe magic
アダプターが使用されます。
最も具体的なアダプターを使用することが最良です。
これにより、最も正確でパフォーマンスの高いパースが提供されます。
たとえば、Rustの
libtest bench
出力を解析している場合、magic
アダプターまたは rust
アダプターではなく、rust_bench
アダプターを使用するべきです。
良い比較のために、私たちの
Bencher perf ページ
を参照してください。
🪄 マジック (デフォルト)
マジックアダプター(magic
)は、すべての他のアダプターのスーパーセットです。
そのため、bencher run
のデフォルトのアダプターですが、探索専用に最適です。
CIでは、ユースケースに最も具体的なアダプターを使用するべきです。
{…} JSON
JSONアダプター(json
)は、BMF JSONを期待します。
Bencherとカスタムベンチマークハーネスを統合するのに最適です。
BMFの例です:
{
"benchmark_name": {
"latency": {
value: 88.0,
lower_value: 87.42,
upper_value: 88.88
}
}
}
この例では、キーbenchmark_name
はベンチマークの名前になります。
ベンチマークの名前は、1024文字までの非空の文字列が使えます。
benchmark_name
オブジェクトは、Metric KindのスラッグまたはUUIDをキーとして含んでいます。
この例では、latency
はLatency Metric Kind のスラッグです。
各プロジェクトにはデフォルトでLatency (つまり latency
)およびThroughput (つまり throughput
) Metric Kindがあり、それぞれnanosecond (ns)
とoperations / second (ops/s)
で測定されます。
Metric Kind オブジェクトには、最大3つの測定値が含まれています:value
、lower_value
、そしてupper_value
です。
lower_value
とupper_value
の測定はオプションであり、計算はベンチマークハーネスごとに特異です。
この例では、latency
Metric Kind オブジェクトは以下の測定を含んでいます:
value
が88.0
lower_value
が87.42
upper_value
が88.88
もしBMF JSONがファイルに保存されているなら、そのファイルのパスを指定するためにオプションの--file
引数を付けたbencher run
CLIサブコマンドを使用できます。
ベンチマークコマンドにも(例:bencher run "bencher mock > results.json" --file results.json
)、ベンチマークコマンドなしにも(例:bencher mock > results.json && bencher run --file results.json
)対応します。
🐰 メモ:
bencher mock
CLIサブコマンドはモックBMFメトリクスを生成します。
#️⃣ C#
C#アダプター(c_sharp
)は、c_sharp_dot_net
のスーパーセットです。
#️⃣ C# DotNet
C# DotNetアダプター(c_sharp_dot_net
)は、BenchmarkDotNetの出力とJSONフォーマット(つまり --exporters json
)を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
Metricには2つのオプションがあります:
mean
(デフォルト):lower_value
とupper_value
は、平均值(つまりvalue
)の下と上の1標準偏差です。median
:lower_value
とupper_value
は、中央値(つまりvalue
)の下と上のインターコーティルレンジです。
これは、オプションの--average
フラグを使用したbencher run
CLIサブコマンドで指定できます。
➕ C++
C++アダプター(cpp
)は、cpp_catch2
とcpp_google
のスーパーセットです。
➕ C++ Catch2
C++ Catch2アダプター(cpp_catch2
)は、Catch2の出力を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
lower_value
とupper_value
は、平均値(つまり value
)の下と上の1標準偏差です。
➕ C++ Google
C++ Googleアダプター(cpp_google
)は、Google BenchmarkのJSONフォーマットの出力(つまり --benchmark_format=json
)を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
利用可能なのは平均値(つまり value
)のみです。lower_value
とupper_value
はありません。
🕳 Go
Goアダプター(go
)は、go_bench
のスーパーセットです。
🕳 Go Bench
Go Benchアダプター(go_bench
)は、go test -benchの出力を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
利用可能なのは平均値(つまり value
)のみです。lower_value
とupper_value
はありません。
☕️ Java
Javaアダプター(java
)は、java_jmh
のスーパーセットです。
☕️ Java JMH
Java JMHアダプター(java_jmh
)は、Java Microbenchmark Harness (JMH)のJSONフォーマットの出力(つまり -rf json
)を期待します。
latency
とthroughput
のMetric Kinds(つまり nanoseconds (ns)
とoperations / second (ops/sec)
)が収集されるかもしれません。
lower_value
とupper_value
は、平均値(つまり value
)の信頼区間の下と上です。
🕸 JavaScript
JavaScriptアダプター(js
)は、js_benchmark
とjs_time
のスーパーセットです。
🕸 JavaScript Benchmark
JavaScript Benchmarkアダプター(js_benchmark
)は、Benchmark.jsの出力を期待します。
throughput
Metric Kind(つまり operations / second (ops/sec)
)が収集されます。
lower_value
とupper_value
は、中央値(つまり value
)の下と上の相対的な誤差です。
🕸 JavaScript Time
JavaScript Timeアダプター(js_time
)は、console.time/console.timeEndの出力を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
利用可能なのは操作時間(つまり value
)のみです。lower_value
とupper_value
はありません。
🐍 Python
Pythonアダプター(python
)は、python_asv
とpython_pytest
のスーパーセットです。
🐍 Python ASV
Python ASVアダプター(python_asv
)は、airspeed velocity CLI asv runの出力を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
lower_value
とupper_value
は、中央値(つまり value
)の下と上のインターコーティルレンジです。
🐍 Python Pytest
Python Pytestアダプター(python_pytest
)は、pytest-benchmarkのJSONフォーマットの出力(つまり --benchmark-json results.json
)を期待します。
このJSON出力はファイルに保存されるため、そのファイルパスを指定するためにbencher run
CLIの--file
引数を使用する必要があります(つまりbencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py"
)。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
Metricには2つのオプションがあります:
mean
(デフォルト):lower_value
とupper_value
は、平均値(つまりvalue
)の下と上の1標準偏差です。median
:lower_value
とupper_value
は、中央値(つまりvalue
)の下と上のインターコーティルレンジです。
これは、オプションの--average
引数を持つbencher run
CLIサブコマンドで指定できます。
♦️ Ruby
Rubyアダプター(ruby
)は、ruby_benchmark
のスーパーセットです。
♦️ Ruby Benchmark
Ruby Benchmarkアダプター(ruby_benchmark
)は、Benchmark モジュールの#bm
、#bmbm
および#benchmark
メソッドの出力を期待します。
各ベンチマークにはラベルが必要です。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
利用可能なのは報告値(つまり value
)のみです。lower_value
とupper_value
はありません。
🦀 Rust
Rustアダプター(rust
)は、rust_bench
とrust_criterion
のスーパーセットです。
🦀 Rust Bench
Rust Benchアダプター(rust_bench
)は、libtest benchの出力を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
lower_value
とupper_value
は、中央値(つまり value
)の下と上の逸脱です。
🦀 Rust Criterion
Rust Criterionアダプター(rust_criterion
)は、Criterionの出力を期待します。
latency
Metric Kind(つまり nanoseconds (ns)
)が収集されます。
lower_value
とupper_value
は、スロープ(もし利用可能なら)または平均値(もし不可能なら)の下限と上限です(つまり value
)。
🦀 Rust Iai
Rust Iaiアダプター(rust_iai
)は、Iaiの出力を期待します。
instructions
、l1_access
、l2_access
、ram_access
およびestimated_cycles
のMetric Kindsが収集されます。
これらの測定値(つまり value
)しか利用できません。lower_value
とupper_value
の測定はありません。
このアダプターのMetric Kindsはデフォルトですべてのプロジェクトに作られません。
しかし、このアダプターを使用すると、これらのMetric Kindsはプロジェクトに自動的に作られます。
🐰 おめでとう! ベンチマークハーネスアダプターについてすべて学びました! 🎉