ベンチマークハーネスアダプター
アダプタはベンチマークハーネスの出力を Bencher Metric Format (BMF) JSON に変換します。
新しいレポートが受け取られた時、アダプタはAPIサーバー上で実行されます。
詳細についてはベンチマーキングの概要を参照してください。
アダプタはbencher run CLIサブコマンドで --adapter オプションを使用して指定することができます。
アダプタが指定されていない場合、デフォルトのmagic アダプタが使用されます。
🪄 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 Gungraun
- ❯_ Shell Hyperfine
{…} JSON
JSON アダプタ(json)は、Bencher Metric Format (BMF) JSONを期待しています。
これは、カスタムベンチマークハーネスをBencherと統合するのに最適です。
詳細については、カスタムベンチマークの追跡方法と
BMF JSON リファレンスをご覧ください。
bencher run --adapter json "bencher mock"⏱️ ビルド時間
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 --adapter json --build-time "echo 0 > binary"⚖️ ファイルサイズ
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オプションは、複数回使用して複数のファイルサイズを追跡することができます。
bencher run --adapter json --file-size binary "echo 0 > binary"#️⃣ C# DotNet
C# DotNet アダプター (c_sharp_dot_net) は、BenchmarkDotNet の出力を JSON フォーマット(例 --exporters json) で期待しています。
latency 測定値(例 nanoseconds (ns))が収集されます。
この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run CLI の --file 引数を使用する必要があります。
bencher run --adapter c_sharp_dot_net --file results.json "dotnet run --exporters json --filter '*'"メトリックには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)よりも一つの標準偏差以下と上です。
bencher run --adapter cpp_catch2 "make benchmarks"➕ C++ Google
C++ Googleアダプター(cpp_google)は、Google Benchmarkの出力をJSON形式(すなわち--benchmark_format=json)で受け取ることを期待しています。
latency測定値(すなわちナノ秒(ns))が収集されます。
平均値(すなわちvalue)のみが利用可能です。lower_valueとupper_valueはありません。
bencher run --adapter cpp_google "make benchmarks --benchmark_format=json"🕳 Goベンチ
Go Benchアダプター (go_bench) は go test -bench の出力を期待しています。
latency 測定値(すなわち ナノ秒 (ns))が収集されます。
value(すなわち平均値)のみが利用可能です。lower_value と upper_value はありません。
bencher run --adapter go_bench "go test -bench"☕️ 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)の下限および上限の信頼区間です。
bencher run --adapter java_jmh --file results.json "java -jar benchmarks.jar -rf json -rff results.json"🕸 JavaScript ベンチマーク
JavaScript ベンチマークアダプター(js_benchmark)は Benchmark.js の出力を期待しています。
throughput 測定 (つまり operations / second (ops/sec))が収集されます。
lower_value と upper_value はそれぞれ中央値(つまり value)より下と上の相対的な誤差の幅です。
bencher run --adapter js_benchmark "node benchmarks.js"🕸 JavaScript 時間
JavaScript 時間アダプタ (js_time) は console.time/console.timeEnd の出力を期待しています。
latency 測定値(つまり ナノ秒 (ns))が収集されます。
利用可能なのは操作時間(つまり value)のみで、lower_value と upper_value はありません。
bencher run --adapter js_time "node benchmarks.js"🐍 Python ASV
Python ASV アダプター (python_asv) は airspeed velocity CLI asv run の出力を想定しています。
latency 測定値(つまり ナノ秒 (ns))が収集されます。
lower_value と upper_value は、それぞれ中央値(つまり value)の下と上の四分位範囲です。
bencher run --adapter python_asv "asv run"🐍 Python Pytest
Python Pytest アダプタ (python_pytest) は、pytest-benchmark の出力を JSON 形式 (つまり --benchmark-json results.json) で期待します。
この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run CLI の --file 引数を使用する必要があります。
latency 測定(つまり ナノ秒 (ns))が収集されます。
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"メトリックには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 はありません。
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"🦀 Rust Bench
Rust Bench アダプタ (rust_bench) は libtest bench の出力を想定しています。
latency 測定値(つまり nanoseconds (ns))が収集されます。
lower_value と upper_value はそれぞれ中央値(つまり value)より下と上の偏差です。
bencher run --adapter rust_bench "cargo +nightly bench"🦀 Rust Criterion
Rust Criterionアダプター (rust_criterion) はCriterionの出力を期待しています。
latency 測定(つまり ナノ秒 (ns))が収集されます。
lower_value と upper_value は、利用可能な場合は傾き、そうでない場合は平均(つまり value)のそれぞれ下限と上限です。
bencher run --adapter rust_criterion "cargo bench"🦀 Rust Iai
Rust Iai アダプター(rust_iai)はIaiの出力を想定しています。
instructions、l1-accesses、l2-accesses、ram-accesses、estimated-cyclesのメジャーが収集されます。
これらのメジャー(つまりvalue)のみが利用可能です。lower_valueとupper_valueのメジャーはありません。
このアダプターのメジャーは、すべてのプロジェクトについてデフォルトで作成されるわけではありません。
しかし、このアダプターを使用すると、これらのメジャーがプロジェクトに自動的に作成されます。
bencher run --adapter rust_iai "cargo bench"🦀 Rust Gungraun
Rust Gungraun アダプター(rust_gungraun)は Gungraun の出力を想定しています。instructions、l1-hits、l2-hits、ram-hits、total-read-write、および estimated-cycles の Measures はデフォルトで収集されます。Gungraun が生成できる追加の Callgrind、Cachegrind、DHAT メトリクスもサポートされています。
これらの Measures では、報告された値(つまり value)のみが利用可能です。lower_value も upper_value も収集されません。
このアダプター用の Measures はすべてのプロジェクトでデフォルト作成されるわけではありません。ただし、このアダプターを使用すると、これらの Measures はプロジェクトに対して自動的に作成されます。
Gungraun は Iai-Callgrind の改名された後継です。
bencher run --adapter rust_gungraun "cargo bench"🦀 Rust Iai-Callgrind
Iai-Callgrind は Gungraun に改名されました。
❯_️ Shell Hyperfine
Shell Hyperfineアダプター (shell_hyperfine) は、Hyperfine の出力を JSON形式(例: --export-json results.json)で期待しています。このJSON出力はファイルに保存されるので、そのファイルパスを指定するために bencher run CLIの --file 引数を使用する必要があります。
latency 測定項目では、(例:nanoseconds (ns))が収集されます。
bencher run --adapter shell_hyperfine --file results.json "hyperfine --export-json results.json 'sleep 0.1'"メトリックには2つのオプションがあります:
mean(デフォルト):lower_valueとupper_valueは、それぞれ平均値(value)よりも1標準偏差下と上にあります。median:lower_valueとupper_valueは、それぞれminとmaxの値です。
これは、bencher run CLI サブコマンドで --average オプションを使用して指定できます。
🐰 おめでとう! ベンチマークハーネスアダプターについてすべて学びました! 🎉