基准测试程序适配器
适配器将基准测试工具的输出转换为 Bencher Metric Format (BMF) JSON。当API服务器收到一份新报告时,适配器会运行。更多细节请参见基准测试概览。可以为bencher run
CLI 子命令通过--adapter
选项指定一个适配器。如果没有指定适配器,那么默认使用 magic
适配器。
🪄 魔法 (默认)
魔法适配器(magic
)是所有其他适配器的超集。
因此,它是 bencher run
的默认适配器。
然而,magic
适配器应仅用于探索。
为获得最佳结果,您应该指定一个基准测试驱动适配器:
- {…} JSON
- #️⃣ C# BenchmarkDotNet
- ➕ C++ Catch2
- ➕ C++ Google Benchmark
- 🕳 Go test -bench
- ☕️ Java 微基准测试套件(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 指标格式 (BMF) JSON。
它非常适合将自定义基准测试工具与 Bencher 集成。
有关更多详细信息,请参阅如何跟踪自定义基准测试
以及 BMF JSON 参考资料。
⏱️ 构建时间
bencher run
CLI 子命令可以用于使用 --build-time
标志来跟踪交付物的构建时间(即编译时间)。在底层,bencher run
将结果输出为 Bencher Metric Format (BMF) JSON。因此,明确使用 the json
adapter 是一种良好的实践。更多详情请参见如何跟踪构建时间。
build-time
度量(即 seconds (s)
)被收集。只有构建时间的值(即 value
)是可用的。lower_value
和 upper_value
都不被收集。build-time
度量并非默认为所有项目创建。然而,当你使用 --build-time
标志时,这个度量将会自动为你的项目创建。
⚖️ 文件大小
bencher run
CLI子命令
可以用来通过--file-size
选项追踪你的交付物的文件大小(即二进制大小)。
--file-size
选项期望一个文件路径,来测量该文件的大小。
在底层,bencher run
将结果输出为Bencher度量格式(BMF)JSON。
因此,明确使用the json
adapter是一个好习惯。
更多详情参见如何追踪文件大小。
收集到的file-size
度量(即字节(B)
)。
只有文件大小值(即value
)是可用的。
不收集lower_value
或upper_value
。
默认情况下不会为所有项目创建file-size
度量。
然而,当你使用--file-size
选项时,这个度量会自动为你的项目创建。
--file-size
选项可以使用多次来跟踪多个文件大小。
#️⃣ C# DotNet
C# DotNet 适配器 (c_sharp_dot_net
) 期望BenchmarkDotNet的输出为JSON格式(即使用 --exporters json
选项)。
会收集延迟
度量(即 纳秒 (ns)
)。
这个 JSON 输出被保存到一个文件中,因此你必须使用 bencher run
CLI 的 --file
参数来指定该文件路径。
度量有两个选项:
mean
(默认):lower_value
和upper_value
分别是标准差下方和上方的平均值(即value
)。median
:lower_value
和upper_value
分别是四分位距下方和上方的中位数(即value
)。
这可以在 bencher运行
CLI 子命令中用 --average
选项来指定。
➕ C++ Catch2
C++ Catch2 适配器(cpp_catch2
)期望 Catch2 输出。
将收集 latency
度量(即 纳秒 (ns)
)。
lower_value
和 upper_value
分别是低于和高于均值(即 value
)的一个标准差。
➕ C++ 谷歌
C++ 谷歌适配器 (cpp_google
) 期望以 JSON 格式(即 --benchmark_format=json
) 接收 Google Benchmark 输出。
将收集 延迟
测量值(即 纳秒 (ns)
)。
只有平均值(即 value
)可用。没有 lower_value
和 upper_value
。
🕳 Go 基准测试
Go 基准测试适配器(go_bench
)预期的输出是 go test -bench。
收集的是延迟
度量(即纳秒 (ns)
)。
只提供均值(即值
),没有最小值
和最大值
。
☕️ Java JMH
Java JMH 适配器(java_jmh
)期望 Java 微基准测试工具 (JMH) 的输出以 JSON格式(即 -rf json
) 出现
这个 JSON 输出被保存到一个文件中,因此你必须使用 bencher run
CLI 的 --file
参数来指定该文件路径。
可以收集延迟
和吞吐量
度量(即纳秒(ns)
和每秒操作数(ops/sec)
)。lower_value
和 upper_value
分别是均值(即value
)的下限和上限置信区间。
🕸 JavaScript 基准测试
JavaScript 基准测试适配器(js_benchmark
)需要 Benchmark.js 的输出。
收集的是 throughput
测量值(即 每秒操作数(ops/sec)
)。
lower_value
和 upper_value
是相对于中值(即 value
)的下方和上方的误差幅度。
🕸 JavaScript 时间
JavaScript 时间适配器(js_time
)期望 console.time/console.timeEnd 的输出。
收集的是 延迟
测量值(即 纳秒 (ns)
)。
仅提供操作时间(即 value
),没有 lower_value
和 upper_value
。
🐍 Python ASV
Python ASV 适配器(python_asv
)期望 airspeed velocity CLI asv run 输出。
将收集 延迟
测量值(即 纳秒 (ns)
)。
lower_value
和 upper_value
分别是中位数(即 value
)以下和以上的四分位距。
🐍 Python Pytest
Python Pytest 适配器(python_pytest
)期望 pytest-benchmark 的输出以 JSON 格式(即 --benchmark-json results.json
)。
这个 JSON 输出被保存到一个文件中,因此你必须使用 bencher run
CLI 的 --file
参数来指定该文件路径。
延迟
测量指标(即 纳秒 (ns)
)会被收集。
有两个选项用于指标:
平均值
(默认):lower_value
和upper_value
分别是平均值(即value
)标准差以下和以上。中位数
:lower_value
和upper_value
分别是中位数(即value
)的四分位距以下和以上。
可以使用 bencher run
CLI 子命令中的可选 --average
参数来指定这一点。
♦️ Ruby 基准测试
Ruby 基准测试适配器(ruby_benchmark
)期望 Benchmark 模块 对于 #bm
、#bmbm
、和 #benchmark
方法的输出。
每个基准测试都需要一个标签。
将收集 latency
测量值(即 纳秒 (ns)
)。
只提供报告值(即 value
),没有 lower_value
和 upper_value
。
🦀 Rust 基准测试
Rust 基准测试适配器(rust_bench
)期望 libtest bench 输出。
收集的延迟
度量(即纳秒(ns)
)。
lower_value
和 upper_value
分别是低于和高于中位数(即value
)的偏差。
🦀 Rust Criterion
Rust Criterion 适配器(rust_criterion
)期待 Criterion 的输出。
会收集 latency
测量(即 纳秒 (ns)
)。
lower_value
和 upper_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
测量值(即 纳秒 (ns)
)。
对于指标有两个选项:
mean
(默认):lower_value
和upper_value
分别为标准差以下和以上的平均值(即value
)。median
:lower_value
和upper_value
分别为min
和max
值。
这可以在 bencher run
CLI 子命令中使用 --average
选项来指定。
🐰 恭喜!你已经学习了所有关于基准测试程序适配器的知识!🎉