Адаптеры для профилировщиков
Адаптеры преобразуют вывод данных профилировщиков в стандартизированный JSON формат - Bencher Metric Format (BMF).
Адаптеры работают на API-сервере при получении нового отчета.
Более глубокое объяснение можно найти в обзоре тестирования производительности.
Адаптеры могут быть указаны в подкоманде CLI bencher run
с опциональным флагом --adapter
.
Если адаптер не указан, по умолчанию используется адаптер magic
.
Лучше всего использовать наиболее подходящий адаптер для вашего кейса.
Это обеспечит наиболее точный и производительный разбор.
Например, если вы разбираете вывод Rust
libtest bench,
вы должны использовать адаптер rust_bench
, а не magic
или rust
адаптер.
Посмотрите на нашей
странице 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
содержит подобные кодам (слагам) или UUIDы Metric Kind в виде ключей.
В этом примере, latency
это код для Metric Kind Latency.
Каждый проект по умолчанию имеет Metric Kind Latency (т.е. latency
) и Throughput (т.е. throughput
),
которые измеряются в наносекундах (ns)
и операций / секунда (ops/s)
соответственно.
Объект Metric Kind содержит Metric с до трех мер: value
, lower_value
, и upper_value
.
Меры lower_value
и upper_value
являются опциональными,
и их расчет специфичен для каждого профилировщика.
В этом примере, объект Metric Kind latency
содержит следующие Mетрики:
value
в размере88.0
lower_value
в размере87.42
upper_value
в размере88.88
Если BMF JSON сохранен в файл,
то вы можете использовать подкоманду CLI bencher run
с опциональным аргументом --file
чтобы указать путь к этому файлу.
Это работает как с командой тестирования производительности (например: bencher run "bencher mock > results.json" --file results.json
),
так и без команды тестирования производительности (например: bencher mock > results.json && bencher run --file results.json
).
🐰 Примечание: Подкоманда CLI
bencher mock
генерирует имитационные данные BMF Metrics.
#️⃣ C#
Адаптер для C# (c_sharp
) включает в себя c_sharp_dot_net
.
#️⃣ C# DotNet
Адаптер для DotNet C# (c_sharp_dot_net
) ожидает вывод BenchmarkDotNet в формате JSON (т.е. --exporters json
).
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
Есть два варианта для metрик:
mean
(по умолчанию):lower_value
иupper_value
это значения на одно стандартное отклонение вниз и вверх от среднего значения (т.е.value
) соответственно.median
:lower_value
иupper_value
это значения на один межквартильный размах вниз и вверх от медианы (т.е.value
) соответственно.
Это можно указать в подкоманде CLI bencher run
с опциональным флагом --average
.
➕ C++
Адаптер для C++ (cpp
) включает в себя cpp_catch2
и cpp_google
.
➕ C++ Catch2
Адаптер для C++ Catch2 (cpp_catch2
) ожидает вывод Catch2.
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
lower_value
и upper_value
это значения на одно стандартное отклонение вниз и вверх от среднего значения (т.е. value
) соответственно.
➕ C++ Google
Адаптер для C++ Google (cpp_google
) ожидает вывод Google Benchmark в формате JSON (т.е. --benchmark_format=json
).
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
Доступно только среднее значение (т.е. value
). Нет lower_value
и upper_value
.
🕳 Go
Адаптер для Go (go
) включает в себя go_bench
.
🕳 Go Bench
Адаптер Go Bench (go_bench
) ожидает вывод go test -bench.
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
Доступно только среднее значение (т.е. value
). Нет lower_value
и upper_value
.
☕️ Java
Адаптер для Java (java
) включает в себя java_jmh
.
☕️ Java JMH
Адаптер для Java JMH (java_jmh
) ожидает вывод Java Microbenchmark Harness (JMH) в формате JSON (т.е. -rf json
).
Могут быть собраны Metric Kinds latency
и throughput
(т.е. наносекунды (ns)
и операции / секунда (ops/sec)
).
lower_value
и upper_value
это нижний и верхний доверительный интервалы для среднего значения (т.е. value
) соответственно.
🕸 JavaScript
Адаптер для JavaScript (js
) включает в себя js_benchmark
и js_time
.
🕸 JavaScript Benchmark
Адаптер JavaScript Benchmark (js_benchmark
) ожидает вывод Benchmark.js.
Metric Kind throughput
(т.е. операции / секунда (ops/sec)
) собирается.
lower_value
и upper_value
это относительная погрешность вниз и вверх от медианы (т.е. value
) соответственно.
🕸 JavaScript Time
Адаптер JavaScript Time (js_time
) ожидает вывод console.time/console.timeEnd.
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
Доступно только время выполнения операции (т.е. value
). Нет lower_value
и upper_value
.
🐍 Python
Адаптер для Python (python
) включает в себя python_asv
и python_pytest
.
🐍 Python ASV
Адаптер Python ASV (python_asv’) ожидает вывод [airspeed velocity](https://github.com/airspeed-velocity/asv) CLI [asv run](https://asv.readthedocs.io/en/stable/commands.html#asv-run). Metric Kind
latency(т.е.
наносекунды (ns)) собираются.
lower_valueи
upper_valueэто величины на один межквартильный размах вниз и вверх от медианы (т.е.
value`) соответственно.
🐍 Python Pytest
Адаптер Python Pytest (python_pytest
) ожидает вывод pytest-benchmark в формате JSON (т.е. --benchmark-json results.json
).
Этот вывод JSON сохраняется в файл, поэтому вы должны использовать аргумент -file
команды CLI bencher run
, чтобы указать путь к этому файлу (т.е. bencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py"
).
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
Есть два варианта для Metriк:
mean
(по умолчанию):lower_value
иupper_value
это значения на одно стандартное отклонение вниз и вверх от среднего значения (т.е.value
) соответственно.median
:lower_value
иupper_value
это значения на один межквартильный размах вниз и вверх от медианы (т.е.value
) соответственно.
Это можно указать в подкоманде CLI bencher run
с опциональным аргументом --average
.
♦️ Ruby
Адаптер для Ruby (ruby
) включает в себя ruby_benchmark
.
♦️ Ruby Benchmark
Адаптер Ruby Benchmark (ruby_benchmark
) ожидает вывод Benchmark module для методов #bm
, #bmbm
, и #benchmark
.
Требуется метка для каждого теста производительности.
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
Доступно только сообщаемое значение (т.е. value
). Нет lower_value
и upper_value
.
🦀 Rust
Адаптер для Rust (rust
) включает в себя rust_bench
и rust_criterion
.
🦀 Rust Bench
Адаптер Rust Bench (rust_bench
) ожидает вывод libtest bench.
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
lower_value
и upper_value
это отклонение вниз и вверх от медианы (т.е. value
) соответственно.
🦀 Rust Criterion
Адаптер Rust Criterion (rust_criterion
) ожидает вывод Criterion.
Metric Kind latency
(т.е. наносекунды (ns)
) собирается.
lower_value
и upper_value
это нижний и верхний доверительные интервалы для среднего значения (т.е. value
) соответственно.
🦀 Rust Iai
Адаптер Rust Iai (rust_iai
) ожидает вывод Iai.
Собираются Metric Kinds instructions
, l1_access
, l2_access
, ram_access
, и estimated_cycles
.
Доступны только эти меры (т.е. value
). Нет lower_value
и upper_value
.
Metric Kinds для этого адаптера не создаются по умолчанию для всех проектов.
Однако, когда вы используете этот адаптер, эти Metric Kinds будут автоматически созданы для вашего проекта.
🐰 Поздравляем! Вы узнали все об адаптерах для профилировки производительности! 🎉