基准测试程序适配器


适配器将基准测试工具的输出转换为 Bencher Metric Format (BMF) JSON。当API服务器收到一份新报告时,适配器会运行。更多细节请参见基准测试概览。可以为bencher run CLI 子命令通过--adapter选项指定一个适配器。如果没有指定适配器,那么默认使用 magic 适配器

🪄 魔法 (默认)

魔法适配器(magic)是所有其他适配器的超集。 因此,它是 bencher run 的默认适配器。 然而,magic 适配器应仅用于探索。

为获得最佳结果,您应该指定一个基准测试驱动适配器:


{…} JSON

JSON 适配器(json)期望 Bencher 指标格式 (BMF) JSON。 它非常适合将自定义基准测试工具与 Bencher 集成。 有关更多详细信息,请参阅如何跟踪自定义基准测试 以及 BMF JSON 参考资料

Terminal window
bencher run --adapter json "bencher mock"

⏱️ 构建时间

bencher run CLI 子命令可以用于使用 --build-time 标志来跟踪交付物的构建时间(即编译时间)。在底层,bencher run 将结果输出为 Bencher Metric Format (BMF) JSON。因此,明确使用 the json adapter 是一种良好的实践。更多详情请参见如何跟踪构建时间

build-time 度量(即 seconds (s))被收集。只有构建时间的值(即 value)是可用的。lower_valueupper_value 都不被收集。build-time 度量并非默认为所有项目创建。然而,当你使用 --build-time 标志时,这个度量将会自动为你的项目创建。

Terminal window
bencher run --adapter json --build-time "echo 0 > binary"

⚖️ 文件大小

bencher run CLI子命令 可以用来通过--file-size选项追踪你的交付物的文件大小(即二进制大小)。 --file-size选项期望一个文件路径,来测量该文件的大小。 在底层,bencher run 将结果输出为Bencher度量格式(BMF)JSON。 因此,明确使用the json adapter是一个好习惯。 更多详情参见如何追踪文件大小

收集到的file-size度量(即字节(B))。 只有文件大小值(即value)是可用的。 不收集lower_valueupper_value。 默认情况下不会为所有项目创建file-size度量。 然而,当你使用--file-size选项时,这个度量会自动为你的项目创建。 --file-size 选项可以使用多次来跟踪多个文件大小。

Terminal window
bencher run --adapter json --file-size binary "echo 0 > binary"

#️⃣ C# DotNet

C# DotNet 适配器 (c_sharp_dot_net) 期望BenchmarkDotNet的输出为JSON格式(即使用 --exporters json 选项)。 会收集延迟度量(即 纳秒 (ns))。 这个 JSON 输出被保存到一个文件中,因此你必须使用 bencher run CLI 的 --file 参数来指定该文件路径。

Terminal window
bencher run --adapter c_sharp_dot_net --file results.json "dotnet run --exporters json --filter '*'"

度量有两个选项:

  • mean(默认):lower_valueupper_value 分别是标准差下方和上方的平均值(即 value)。
  • medianlower_valueupper_value 分别是四分位距下方和上方的中位数(即 value)。

这可以在 bencher运行 CLI 子命令中用 --average 选项来指定。


➕ C++ Catch2

C++ Catch2 适配器(cpp_catch2)期望 Catch2 输出。 将收集 latency 度量(即 纳秒 (ns))。 lower_valueupper_value 分别是低于和高于均值(即 value)的一个标准差。

Terminal window
bencher run --adapter cpp_catch2 "make benchmarks"

➕ C++ 谷歌

C++ 谷歌适配器 (cpp_google) 期望以 JSON 格式(即 --benchmark_format=json 接收 Google Benchmark 输出。 将收集 延迟 测量值(即 纳秒 (ns))。 只有平均值(即 value)可用。没有 lower_valueupper_value

Terminal window
bencher run --adapter cpp_google "make benchmarks --benchmark_format=json"

🕳 Go 基准测试

Go 基准测试适配器(go_bench)预期的输出是 go test -bench。 收集的是延迟度量(即纳秒 (ns))。 只提供均值(即),没有最小值最大值

Terminal window
bencher run --adapter go_bench "go test -bench"

☕️ Java JMH

Java JMH 适配器(java_jmh)期望 Java 微基准测试工具 (JMH) 的输出以 JSON格式(即 -rf json 出现 这个 JSON 输出被保存到一个文件中,因此你必须使用 bencher run CLI 的 --file 参数来指定该文件路径。 可以收集延迟吞吐量度量(即纳秒(ns)每秒操作数(ops/sec))。lower_valueupper_value 分别是均值(即value)的下限和上限置信区间。

Terminal window
bencher run --adapter java_jmh --file results.json "java -jar benchmarks.jar -rf json -rff results.json"

🕸 JavaScript 基准测试

JavaScript 基准测试适配器(js_benchmark)需要 Benchmark.js 的输出。 收集的是 throughput 测量值(即 每秒操作数(ops/sec))。 lower_valueupper_value 是相对于中值(即 value)的下方和上方的误差幅度。

Terminal window
bencher run --adapter js_benchmark "node benchmarks.js"

🕸 JavaScript 时间

JavaScript 时间适配器(js_time)期望 console.time/console.timeEnd 的输出。 收集的是 延迟 测量值(即 纳秒 (ns))。 仅提供操作时间(即 value),没有 lower_valueupper_value

Terminal window
bencher run --adapter js_time "node benchmarks.js"

🐍 Python ASV

Python ASV 适配器(python_asv)期望 airspeed velocity CLI asv run 输出。 将收集 延迟 测量值(即 纳秒 (ns))。 lower_valueupper_value 分别是中位数(即 value)以下和以上的四分位距。

Terminal window
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 参数来指定该文件路径。 延迟 测量指标(即 纳秒 (ns))会被收集。

Terminal window
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"

有两个选项用于指标:

  • 平均值(默认):lower_valueupper_value 分别是平均值(即 value)标准差以下和以上。
  • 中位数lower_valueupper_value 分别是中位数(即 value)的四分位距以下和以上。

可以使用 bencher run CLI 子命令中的可选 --average 参数来指定这一点。


♦️ Ruby 基准测试

Ruby 基准测试适配器(ruby_benchmark)期望 Benchmark 模块 对于 #bm#bmbm、和 #benchmark 方法的输出。 每个基准测试都需要一个标签。 将收集 latency 测量值(即 纳秒 (ns))。 只提供报告值(即 value),没有 lower_valueupper_value

Terminal window
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"

🦀 Rust 基准测试

Rust 基准测试适配器(rust_bench)期望 libtest bench 输出。 收集的延迟度量(即纳秒(ns))。 lower_valueupper_value 分别是低于和高于中位数(即value)的偏差。

Terminal window
bencher run --adapter rust_bench "cargo +nightly bench"

🦀 Rust Criterion

Rust Criterion 适配器(rust_criterion)期待 Criterion 的输出。 会收集 latency 测量(即 纳秒 (ns))。 lower_valueupper_value 分别是斜率(如果可用)或平均值(如果不可用)的下限和上限(即 )。

Terminal window
bencher run --adapter rust_criterion "cargo bench"

🦀 Rust Iai

Rust Iai 适配器(rust_iai)期望 Iai 输出。 将收集 instructionsl1-accessesl2-accessesram-accessesestimated-cycles 测量值。 只有这些测量值(即 value)可用。没有 lower_valueupper_value 测量值。 对于所有项目,这个适配器的测量值默认不会被创建。 然而,当你使用这个适配器时,这些测量值将会为你的项目自动创建。

Terminal window
bencher run --adapter rust_iai "cargo bench"

🦀 Rust Iai-Callgrind

Rust Iai 适配器(rust_iai_callgrind)期望 Iai-Callgrind 的输出。 它收集 instructionsl1-hitsl2-hitsram-hitstotal-read-writeestimated-cycles 这几个度量值。 只有这些度量值(即 value)是可用的。没有 lower_valueupper_value 这样的度量值。 对于这个适配器,这些度量值不会为所有项目默认创建。 然而,当你使用这个适配器时,这些度量值会自动为你的项目创建。

Terminal window
bencher run --adapter rust_iai_callgrind "cargo bench"

❯_️ Shell Hyperfine

Shell Hyperfine 适配器(shell_hyperfine)期望 Hyperfine 的输出以 JSON格式(即 --export-json results.json 出现。这个 JSON 输出会被保存到一个文件中,因此你必须使用 bencher run CLI 的 --file 参数来指定该文件路径。将会收集到 latency 测量值(即 纳秒 (ns))。

Terminal window
bencher run --adapter shell_hyperfine --file results.json "hyperfine --export-json results.json 'sleep 0.1'"

对于指标有两个选项:

  • mean(默认):lower_valueupper_value 分别为标准差以下和以上的平均值(即 value)。
  • 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