基准测试程序适配器


适配器将基准测试程序的输出转换为标准化的JSON,Bencher度量格式(BMF)。 当接收到新报告时,适配器会在API服务器上运行。 查看基准测试概述以便更深入地理解。 它们可以在bencher run CLI子命令中通过可选的--adapter标志进行指定。 如果没有指定适配器,将默认使用“magic”适配器

最好为您的用例使用最特定的适配器。 这将提供最准确且性能最佳的解析。 例如,如果你正在解析Rust libtest bench 的输出,你应该使用rust_bench适配器,而不是magicrust适配器。 查看我们的 Bencher perf页面 以便进行良好比较。

🪄 Magic (默认)

Magic适配器(magic)是所有其他适配器的超集。 因此,它是bencher run的默认适配器, 但是最好只用于探索。 在CI中,你应该为你的用例使用最特定的适配器。

{…} JSON

JSON适配器(json)期待BMF JSON。 它非常适合与Bencher集成自定义基准测试的程序。

BMF的例子:

{
"benchmark_name": {
"latency": {
"value": 88.0,
"lower_value": 87.42,
"upper_value": 88.88
}
}
}

在这个例子中,键benchmark_name将是一个基准测试的名称。 基准测试的名字可以是任何长度不超过1024个字符的非空字符串。 benchmark_name对象包含Measure别名或UUID作为键。 在这个例子中,latency是延迟度量种类的别名。 每个项目默认具有一个延迟(即latency)和吞吐量(即throughput)度量种类, 它们分别在纳秒(ns)操作数/秒(ops/s)中测量。 度量种类对象包含最多三个测量值:valuelower_valueupper_valuelower_valueupper_value测量值是可选的, 它们的计算是基准测试程序特定的。

在这个例子中,latency度量种类对象包含以下测量值:

  • value88.0
  • lower_value87.42
  • upper_value88.88

如果BMF JSON存储在文件中, 那么你可以使用bencher run CLI子命令并使用可选的--file参数来指定那个文件路径。 这对于具有基准测试命令(例如:bencher run "bencher mock > results.json" --file results.json) 和没有基准测试命令的情况都适用(例如:bencher mock > results.json && bencher run --file results.json)。

description: Benchmark Name
type: object
additionalProperties:
description: Measure Name, Slug, or UUID
type: object
properties:
value:
type: number
format: float
required: true
lower_value:
type: number
format: float
required: false
upper_value:
type: number
format: float
required: false

🐰 注意:bencher mock CLI子命令会生成模拟BMF度量值。

#️⃣ C#

C#适配器(c_sharp)是c_sharp_dot_net的超集。

#️⃣ C# DotNet

C# DotNet适配器(c_sharp_dot_net)期待使用BenchmarkDotNet的输出,输出为JSON格式(即 --exporters json。 收集latency度量种类数据 (即 nanoseconds (ns)).

度量值有两个选项:

  • mean (default): lower_valueupper_value分别位于均值 (即 value) 的一个标准差之下和之上。
  • median: lower_valueupper_value分别是中位数 (即 value) 的一个四分位距之下和之上。

这可以在bencher run CLI子命令中通过可选的--average标志进行指定。

➕ C++

C++适配器 (cpp)是cpp_catch2cpp_google的超集。

➕ C++ Catch2

C++ Catch2适配器 (cpp_catch2) 期待 Catch2 的输出。 收集latency度量种类数据 (即 nanoseconds (ns)). lower_valueupper_value分别位于均值 (即 value) 的一个标准差之下和之上。

➕ C++ Google

C++ Google适配器 (cpp_google) 期待 Google 基准测试的输出,输出为JSON格式 (即 --benchmark_format=json)。 收集latency度量种类数据 (即 nanoseconds (ns)). 只有均值 (即 value) 可用。没有 lower_valueupper_value

🕳 Go

Go适配器 (go)是go_bench的超集。

🕳 Go Bench

Go Bench适配器 (go_bench)期待go test -bench的输出。 收集latency度量种类数据 (即 nanoseconds (ns)). 只有均值 (即 value) 可用。没有 lower_valueupper_value

☕️ Java

Java适配器 (java)是java_jmh的超集。

☕️ Java JMH

Java JMH适配器 (java_jmh)期待Java Microbenchmark Harness (JMH)的输出,输出为JSON格式 (即 -rf json)。 可同时收集latencythroughput度量种类数据 (即 nanoseconds (ns)operations / second (ops/sec)). lower_valueupper_value是均值 (即 value) 的下限和上限间隔。

🕸 JavaScript

JavaScript适配器 (js)是js_benchmarkjs_time的超集。

🕸 JavaScript Benchmark

JavaScript Benchmark适配器 (js_benchmark)期待Benchmark.js的输出。 收集throughput度量种类数据 (即 operations / second (ops/sec)). lower_valueupper_value为中位数 (即 value) 的下方和上方的相对误差范围。

🕸 JavaScript Time

JavaScript Time适配器 (js_time)期待console.time/console.timeEnd的输出。 收集latency度量种类数据 (即 nanoseconds (ns)). 只有操作时间(即 value)可用。没有 lower_valueupper_value.

🐍 Python

Python适配器 (python)是python_asvpython_pytest的超集。

🐍 Python ASV

Python ASV适配器 (python_asv)期待使用airspeed velocity CLI 的asv run的输出。 收集latency度量种类数据 (即 nanoseconds (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度量种类数据 (即 nanoseconds (ns)).

度量值有两个选项:

  • mean (default): lower_valueupper_value分别位于均值 (即 value) 的一个标准差之下和之上。
  • median: lower_valueupper_value分别是中位数 (即 value) 的一个四分位距之下和之上。

这可以在bencher run CLI子命令中通过可选的--average参数进行指定。

♦️ Ruby

Ruby适配器 (ruby)是ruby_benchmark的超集。

♦️ Ruby Benchmark

Ruby Benchmark适配器 (ruby_benchmark)期待Benchmark模块#bm#bmbm#benchmark方法的输出。 每个基准测试必须有一个标签。 收集latency度量种类数据 (即 nanoseconds (ns)). 只有报告的值(即 value)可用。没有 lower_valueupper_value

🦀 Rust

Rust适配器 (rust)是rust_benchrust_criterion的超集。

🦀 Rust Bench

Rust Bench适配器 (rust_bench)期待libtest bench的输出。 收集latency度量种类数据 (即 nanoseconds (ns)). lower_valueupper_value分别是中位数 (即 value) 的偏差下限和上限。

🦀 Rust Criterion

Rust Criterion适配器 (rust_criterion)期待Criterion的输出。 收集latency度量种类数据 (即 nanoseconds (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 Adapter(rust_iai_callgrind)需要 Iai-Callgrind 的输出。 将收集instructionsl1_accessl2_accessram_accesstotal_accessesestimated_cycles这些度量值。 只有这些度量值(即value)是可用的。没有 lower_valueupper_value度量值。 对于所有项目,默认情况下不会创建此适配器的度量值。 但是,当您使用此适配器时,这些度量值将自动为您的项目创建。

❯_ Shell

Shell 适配器(shell)是 shell_hyperfine的超集。

❯_️ Shell Hyperfine

Shell Hyperfine 适配器(shell_hyperfine)期待 Hyperfine的输出为 [JSON 格式(例如 "--export-json results.json")](https://github.com/sharkdp/hyperfine/tree/master/scripts#example)。 这个 JSON 输出被保存到一个文件,所以你必须使用 bencher runCLI—file参数来指定该文件路径 (例如bencher run —file results.json “hyperfine —export-json results.json ‘sleep 0.1’”)。 会收集latency度量类型(即 nanoseconds (ns)`)。

度量有两种选项:

  • 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: Wed, March 27, 2024 at 7:50:00 AM UTC