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


アダプターは、ベンチマークハーネスの出力を標準化されたJSON、Bencherメトリックフォーマット(BMF)に変換します。 アダプターは、新しいレポートが受け取られたときにAPIサーバー上で実行されます。 より深い説明のために、ベンチマークの概観を参照してください。 それらは、オプションの--adapterフラグを使用したbencher run CLIサブコマンドで指定できます。 アダプターが指定されていない場合、デフォルトでthe magic アダプターが使用されます。

最も具体的なアダプターを使用することが最良です。 これにより、最も正確でパフォーマンスの高いパースが提供されます。 たとえば、Rustの libtest bench 出力を解析している場合、magic アダプターまたは rust アダプターではなく、rust_bench アダプターを使用するべきです。 良い比較のために、私たちの Bencher perf ページ を参照してください。

Benchmark Adapter Comparison for Bencher - Bencher

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

マジックアダプター(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つの測定値が含まれています:valuelower_value、そしてupper_valueです。 lower_valueupper_valueの測定はオプションであり、計算はベンチマークハーネスごとに特異です。

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

  • 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)対応します。


🐰 メモ: 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_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 Metric Kind(つまり nanoseconds (ns))が収集されます。 lower_valueupper_valueは、平均値(つまり value)の下と上の1標準偏差です。

➕ C++ Google

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

🕳 Go

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

🕳 Go Bench

Go Benchアダプター(go_bench)は、go test -benchの出力を期待します。 latency Metric Kind(つまり 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のMetric Kinds(つまり 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 Metric Kind(つまり operations / second (ops/sec))が収集されます。 lower_valueupper_valueは、中央値(つまり value)の下と上の相対的な誤差です。

🕸 JavaScript Time

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

🐍 Python

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

🐍 Python ASV

Python ASVアダプター(python_asv)は、airspeed velocity CLI asv runの出力を期待します。 latency Metric Kind(つまり 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 Metric Kind(つまり 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 Metric Kind(つまり nanoseconds (ns))が収集されます。 利用可能なのは報告値(つまり value)のみです。lower_valueupper_valueはありません。

🦀 Rust

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

🦀 Rust Bench

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

🦀 Rust Criterion

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

🦀 Rust Iai

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



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


次へ進む: 閾値 & アラート ➡

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