ベンチマークハーネスアダプター
アダプタはベンチマークハーネスの出力を Bencher Metric Format (BMF) JSON に変換します。
新しいレポートが受け取られた時、アダプタはAPIサーバー上で実行されます。
詳細についてはベンチマーキングの概要を参照してください。
アダプタはbencher run
CLIサブコマンドで --adapter
オプションを使用して指定することができます。
アダプタが指定されていない場合、デフォルトのmagic
アダプタが使用されます。
🪄 マジック (デフォルト)
Magicアダプター(magic
)は、他のすべてのアダプターのスーパーセットです。
そのため、bencher run
のデフォルトアダプターとなっています。
ただし、magic
アダプターは探索用途のみに使用すべきです。
最適な結果を得るためには、ベンチマークハーネスアダプターを指定するべきです:
- {…} JSON
- #️⃣ C# BenchmarkDotNet
- ➕ C++ Catch2
- ➕ C++ Google Benchmark
- 🕳 Go test -bench
- ☕️ Java Microbenchmark Harness (JMH)
- 🕸 JavaScript Benchmark.js
- 🕸 JavaScript console.time/console.timeEnd
- 🐍 Python airspeed velocity (asv)
- 🐍 Python pytest-benchmark
- ♦️ Ruby Benchmark
- 🦀 Rust libtest bench
- 🦀 Rust Criterion
- 🦀 Rust Iai
- 🦀 Rust Iai-Callgrind
- ❯_ Shell Hyperfine
{…} JSON
JSON アダプタ(json
)は、Bencher Metric Format (BMF) JSONを期待しています。
これは、カスタムベンチマークハーネスをBencherと統合するのに最適です。
詳細については、カスタムベンチマークの追跡方法と
BMF JSON リファレンスをご覧ください。
⏱️ ビルド時間
bencher run
CLI サブコマンドを使用して、--build-time
フラグを指定することで、成果物のビルド時間(すなわちコンパイル時間)を追跡できます。内部的には、bencher run
は結果を Bencher Metric Format (BMF) JSON として出力します。したがって、明示的に the json
adapter を使用することが推奨されます。詳細については、ビルド時間を追跡する方法 を参照してください。
build-time
測定値(すなわち 秒 (s)
)が収集されます。ビルド時間の値(すなわち value
)のみが利用可能です。lower_value
や upper_value
は収集されません。build-time
測定値はすべてのプロジェクトにデフォルトで作成されるわけではありません。しかし、--build-time
フラグを使用する場合、この測定値は自動的にプロジェクトに作成されます。
⚖️ ファイルサイズ
bencher run
CLIサブコマンドは、--file-size
オプションを使用して、納品物のファイルサイズ(つまりバイナリーサイズ)を追跡するために使用できます。--file-size
オプションは、サイズが測定されるファイルのファイルパスを期待します。内部的に、bencher run
は結果をBencher Metric Format (BMF) JSONとして出力します。したがって、明示的にthe json
adapterを使用することが良い習慣です。詳細については、ファイルサイズを追跡する方法を参照してください。
file-size
測定(つまり bytes (B)
)が収集されます。利用可能なのはファイルサイズ値(つまり value
)のみです。lower_value
や upper_value
は収集されません。file-size
測定は、すべてのプロジェクトにデフォルトで作成されるわけではありません。しかし、--file-size
オプションを使用した場合、この測定はプロジェクトに自動的に作成されます。
--file-size
オプションは、複数回使用して複数のファイルサイズを追跡することができます。
#️⃣ C# DotNet
C# DotNet アダプター (c_sharp_dot_net
) は、BenchmarkDotNet の出力を JSON フォーマット(例 --exporters json
) で期待しています。
latency
測定値(例 nanoseconds (ns)
)が収集されます。
この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run
CLI の --file
引数を使用する必要があります。
メトリックには2つのオプションがあります:
mean
(デフォルト):lower_value
とupper_value
はそれぞれ平均(value
)より1標準偏差下と上です。median
:lower_value
とupper_value
はそれぞれ中央値(value
)より1四分位範囲下と上です。
これは、--average
オプションを使用して bencher run
CLI サブコマンドで指定できます。
➕ C++ Catch2
C++ Catch2 アダプター(cpp_catch2
)は Catch2 の出力を期待しています。
latency
メジャー(すなわち ナノ秒 (ns)
)が収集されます。
lower_value
と upper_value
は、それぞれ平均値(すなわち value
)よりも一つの標準偏差以下と上です。
➕ C++ Google
C++ Googleアダプター(cpp_google
)は、Google Benchmarkの出力をJSON形式(すなわち--benchmark_format=json
)で受け取ることを期待しています。
latency
測定値(すなわちナノ秒(ns)
)が収集されます。
平均値(すなわちvalue
)のみが利用可能です。lower_value
とupper_value
はありません。
🕳 Goベンチ
Go Benchアダプター (go_bench
) は go test -bench の出力を期待しています。
latency
測定値(すなわち ナノ秒 (ns)
)が収集されます。
value
(すなわち平均値)のみが利用可能です。lower_value
と upper_value
はありません。
☕️ Java JMH
Java JMH アダプター (java_jmh
) は、Java Microbenchmark Harness (JMH) の出力を JSON形式 (つまり -rf json
)で期待しています。
この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run
CLI の --file
引数を使用する必要があります。
latency
と throughput
の測定値(つまり ナノ秒 (ns)
と 秒間操作数 (ops/sec)
)が収集されることがあります。
lower_value
と upper_value
は、それぞれ平均(つまり value
)の下限および上限の信頼区間です。
🕸 JavaScript ベンチマーク
JavaScript ベンチマークアダプター(js_benchmark
)は Benchmark.js の出力を期待しています。
throughput
測定 (つまり operations / second (ops/sec)
)が収集されます。
lower_value
と upper_value
はそれぞれ中央値(つまり value
)より下と上の相対的な誤差の幅です。
🕸 JavaScript 時間
JavaScript 時間アダプタ (js_time
) は console.time/console.timeEnd の出力を期待しています。
latency
測定値(つまり ナノ秒 (ns)
)が収集されます。
利用可能なのは操作時間(つまり value
)のみで、lower_value
と upper_value
はありません。
🐍 Python ASV
Python ASV アダプター (python_asv
) は airspeed velocity CLI asv run の出力を想定しています。
latency
測定値(つまり ナノ秒 (ns)
)が収集されます。
lower_value
と upper_value
は、それぞれ中央値(つまり value
)の下と上の四分位範囲です。
🐍 Python Pytest
Python Pytest アダプタ (python_pytest
) は、pytest-benchmark の出力を JSON 形式 (つまり --benchmark-json results.json
) で期待します。
この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run
CLI の --file
引数を使用する必要があります。
latency
測定(つまり ナノ秒 (ns)
)が収集されます。
メトリックには2つのオプションがあります:
mean
(デフォルト):lower_value
とupper_value
はそれぞれ平均値 (つまりvalue
) の1標準偏差以下と上になります。median
:lower_value
とupper_value
はそれぞれ中央値 (つまりvalue
) の1四分位範囲以下と上になります。
これは、オプションの --average
引数を使用して bencher run
CLI サブコマンドで指定できます。
♦️ Ruby ベンチマーク
Ruby ベンチマークアダプター(ruby_benchmark
)は、#bm
、#bmbm
、そして #benchmark
メソッドの出力としてBenchmark モジュールを期待しています。
各ベンチマークにはラベルが必要です。
latency
測定値(つまり ナノ秒 (ns)
)が収集されます。
報告された値(つまり value
)のみが利用可能です。lower_value
や upper_value
はありません。
🦀 Rust Bench
Rust Bench アダプタ (rust_bench
) は libtest bench の出力を想定しています。
latency
測定値(つまり nanoseconds (ns)
)が収集されます。
lower_value
と upper_value
はそれぞれ中央値(つまり value
)より下と上の偏差です。
🦀 Rust Criterion
Rust Criterionアダプター (rust_criterion
) はCriterionの出力を期待しています。
latency
測定(つまり ナノ秒 (ns)
)が収集されます。
lower_value
と upper_value
は、利用可能な場合は傾き、そうでない場合は平均(つまり value
)のそれぞれ下限と上限です。
🦀 Rust Iai
Rust Iai アダプター(rust_iai
)はIaiの出力を想定しています。
instructions
、l1-accesses
、l2-accesses
、ram-accesses
、estimated-cycles
のメジャーが収集されます。
これらのメジャー(つまりvalue
)のみが利用可能です。lower_value
とupper_value
のメジャーはありません。
このアダプターのメジャーは、すべてのプロジェクトについてデフォルトで作成されるわけではありません。
しかし、このアダプターを使用すると、これらのメジャーがプロジェクトに自動的に作成されます。
🦀 Rust Iai-Callgrind
RustのIaiアダプタ(rust_iai_callgrind
)は、Iai-Callgrindの出力を期待します。
instructions
、l1-hits
、l2-hits
、ram-hits
、total-read-write
、そしてestimated-cycles
の測定値が収集されます。
これらの測定値(つまりvalue
)のみが利用可能です。lower_value
やupper_value
の測定値はありません。
このアダプタのための測定値は、すべてのプロジェクトに対してデフォルトで作成されるわけではありません。
しかし、このアダプタを使用する場合、これらの測定値はあなたのプロジェクトのために自動的に作成されます。
❯_️ Shell Hyperfine
Shell Hyperfineアダプター (shell_hyperfine
) は、Hyperfine の出力を JSON形式(例: --export-json results.json
)で期待しています。このJSON出力はファイルに保存されるので、そのファイルパスを指定するために bencher run
CLIの --file
引数を使用する必要があります。
latency
測定項目では、(例:nanoseconds (ns)
)が収集されます。
メトリックには2つのオプションがあります:
mean
(デフォルト):lower_value
とupper_value
は、それぞれ平均値(value
)よりも1標準偏差下と上にあります。median
:lower_value
とupper_value
は、それぞれmin
とmax
の値です。
これは、bencher run
CLI サブコマンドで --average
オプションを使用して指定できます。
🐰 おめでとう! ベンチマークハーネスアダプターについてすべて学びました! 🎉