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


アダプターは、ベンチマークハーネスの出力を標準化された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オブジェクトは、MeasureのスラッグまたはUUIDをキーとして含んでいます。 この例では、latencyはLatency Measure のスラッグです。 各プロジェクトにはデフォルトでLatency (つまり latency)およびThroughput (つまり throughput) Measureがあり、それぞれnanosecond (ns)operations / second (ops/s)で測定されます。 Measure オブジェクトには、最大3つの測定値が含まれています:valuelower_value、そしてupper_valueです。 lower_valueupper_valueの測定はオプションであり、計算はベンチマークハーネスごとに特異です。

この例では、latency Measure オブジェクトは以下の測定を含んでいます:

  • value88.0
  • lower_value87.42
  • upper_value88.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)対応します。

description: Benchmark Name
type: object
additionalProperties:
description: Measure Name, Slug, or UUID
type: object
properties:
value:
type: number
format: float
required: true
lower_value:
type: number
format: float
required: false
upper_value:
type: number
format: float
required: false

🐰 メモ: 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 Measure(つまり nanoseconds (ns))が収集されます。

Metricには2つのオプションがあります:

  • mean(デフォルト): lower_valueupper_valueは、平均值(つまり value)の下と上の1標準偏差です。
  • median: lower_valueupper_valueは、中央値(つまり value)の下と上のインターコーティルレンジです。

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

➕ C++

C++アダプター(cpp)は、cpp_catch2cpp_googleのスーパーセットです。

➕ C++ Catch2

C++ Catch2アダプター(cpp_catch2)は、Catch2の出力を期待します。 latency Measure(つまり nanoseconds (ns))が収集されます。 lower_valueupper_valueは、平均値(つまり value)の下と上の1標準偏差です。

➕ C++ Google

C++ Googleアダプター(cpp_google)は、Google BenchmarkJSONフォーマットの出力(つまり --benchmark_format=jsonを期待します。 latency Measure(つまり nanoseconds (ns))が収集されます。 利用可能なのは平均値(つまり value)のみです。lower_valueupper_valueはありません。

🕳 Go

Goアダプター(go)は、go_benchのスーパーセットです。

🕳 Go Bench

Go Benchアダプター(go_bench)は、go test -benchの出力を期待します。 latency Measure(つまり nanoseconds (ns))が収集されます。 利用可能なのは平均値(つまり value)のみです。lower_valueupper_valueはありません。

☕️ Java

Javaアダプター(java)は、java_jmhのスーパーセットです。

☕️ Java JMH

Java JMHアダプター(java_jmh)は、Java Microbenchmark Harness (JMH)JSONフォーマットの出力(つまり -rf jsonを期待します。 latencythroughputのMeasures(つまり nanoseconds (ns)operations / second (ops/sec))が収集されるかもしれません。 lower_valueupper_valueは、平均値(つまり value)の信頼区間の下と上です。

🕸 JavaScript

JavaScriptアダプター(js)は、js_benchmarkjs_timeのスーパーセットです。

🕸 JavaScript Benchmark

JavaScript Benchmarkアダプター(js_benchmark)は、Benchmark.jsの出力を期待します。 throughput Measure(つまり operations / second (ops/sec))が収集されます。 lower_valueupper_valueは、中央値(つまり value)の下と上の相対的な誤差です。

🕸 JavaScript Time

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

🐍 Python

Pythonアダプター(python)は、python_asvpython_pytestのスーパーセットです。

🐍 Python ASV

Python ASVアダプター(python_asv)は、airspeed velocity CLI asv runの出力を期待します。 latency Measure(つまり nanoseconds (ns))が収集されます。 lower_valueupper_valueは、中央値(つまり value)の下と上のインターコーティルレンジです。

🐍 Python Pytest

Python Pytestアダプター(python_pytest)は、pytest-benchmarkJSONフォーマットの出力(つまり --benchmark-json results.jsonを期待します。 このJSON出力はファイルに保存されるため、そのファイルパスを指定するためにbencher run CLIの--file引数を使用する必要があります(つまりbencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py")。 latency Measure(つまり nanoseconds (ns))が収集されます。

Metricには2つのオプションがあります:

  • mean(デフォルト): lower_valueupper_valueは、平均値(つまり value)の下と上の1標準偏差です。
  • median: lower_valueupper_valueは、中央値(つまり value)の下と上のインターコーティルレンジです。

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

♦️ Ruby

Rubyアダプター(ruby)は、ruby_benchmarkのスーパーセットです。

♦️ Ruby Benchmark

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

🦀 Rust

Rustアダプター(rust)は、rust_benchrust_criterionのスーパーセットです。

🦀 Rust Bench

Rust Benchアダプター(rust_bench)は、libtest benchの出力を期待します。 latency Measure(つまり nanoseconds (ns))が収集されます。 lower_valueupper_valueは、中央値(つまり value)の下と上の逸脱です。

🦀 Rust Criterion

Rust Criterionアダプター(rust_criterion)は、Criterionの出力を期待します。 latency Measure(つまり nanoseconds (ns))が収集されます。 lower_valueupper_valueは、スロープ(もし利用可能なら)または平均値(もし不可能なら)の下限と上限です(つまり value)。

🦀 Rust Iai

Rust Iaiアダプター(rust_iai)は、Iaiの出力を期待します。 instructionsl1_accessl2_accessram_accessおよびestimated_cyclesのMeasuresが収集されます。 これらの測定値(つまり value)しか利用できません。lower_valueupper_valueの測定はありません。 このアダプターのMeasuresはデフォルトですべてのプロジェクトに作られません。 しかし、このアダプターを使用すると、これらのMeasuresはプロジェクトに自動的に作られます。

🦀 Rust Iai-Callgrind

Rust Iaiアダプター(rust_iai_callgrind)は、Iai-Callgrindの出力を期待しています。 instructionsl1_accessl2_accessram_accesstotal_accesses、そして estimated_cyclesといった指標が収集されます。 これらの指標(すなわち value)のみが利用可能で、lower_valueおよびupper_value指標はありません。 このアダプタの指標は、すべてのプロジェクトでデフォルトで作成されるわけではありません。 しかし、このアダプタを使用すると、これらの指標は自動的にプロジェクトで作成されます。

❯_ Shell

シェル・アダプター(shell)は shell_hyperfine のスーパーセットです。

❯_️ Shell Hyperfine

シェルHyperfineアダプター(shell_hyperfine)は、Hyperfine の出力を JSON形式 (つまり --export-json results.json)で受け取ることを想定しています。 このJSON出力はファイルに保存されるため、そのファイルパスを指定するために bencher run CLI の --file 引数を使用する必要があります(つまり bencher run --file results.json "hyperfine --export-json results.json 'sleep 0.1'")。 latency メトリックタイプ(つまり nanoseconds (ns))が収集されます。

メトリックには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: Wed, March 27, 2024 at 7:50:00 AM UTC