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


アダプタはベンチマークハーネスの出力を 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 リファレンスをご覧ください。

⚖️ ファイルサイズ

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オプションは、複数回使用して複数のファイルサイズを追跡することができます。


#️⃣ C# DotNet

C# DotNet アダプター (c_sharp_dot_net) は、BenchmarkDotNet の出力を JSON フォーマット(例 --exporters json で期待しています。 latency 測定値(例 nanoseconds (ns))が収集されます。

メトリックには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)よりも一つの標準偏差以下と上です。

➕ C++ Google

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


🕳 Goベンチ

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


☕️ Java JMH

Java JMH アダプター (java_jmh) は、Java Microbenchmark Harness (JMH) の出力を JSON形式 (つまり -rf json)で期待しています。 latencythroughput の測定値(つまり ナノ秒 (ns)秒間操作数 (ops/sec))が収集されることがあります。 lower_valueupper_value は、それぞれ平均(つまり value)の下限および上限の信頼区間です。


🕸 JavaScript ベンチマーク

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

🕸 JavaScript 時間

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


🐍 Python ASV

Python ASV アダプター (python_asv) は airspeed velocity CLI asv run の出力を想定しています。 latency 測定値(つまり ナノ秒 (ns))が収集されます。 lower_valueupper_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 測定(つまり ナノ秒 (ns))が収集されます。

メトリックには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 はありません。


🦀 Rust Bench

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

🦀 Rust Criterion

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

🦀 Rust Iai

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

🦀 Rust Iai-Callgrind

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


❯_️ Shell Hyperfine

Shell 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: Thu, May 9, 2024 at 5:17:00 PM UTC