Адаптеры для профилировщиков
Адаптеры преобразуют выходные данные инструментальной среды тестирования производительности в JSON формате Bencher Metric Format (BMF).
Адаптеры работают на сервере API, когда получен новый отчет.
Смотрите обзор тестирования производительности для получения более подробной информации.
Адаптер можно указать для подкоманды CLI the bencher run
с опцией --adapter
.
Если адаптер не указан, по умолчанию используется адаптер 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 Iai-Callgrind
- ❯_ Shell Hyperfine
{…} JSON
Адаптер JSON (json
) работает с JSON в формате Bencher Metric Format (BMF).
Он идеально подходит для интеграции пользовательских средств измерения производительности с Bencher.
Для более подробной информации смотрите как отслеживать пользовательские бенчмарки
и ссылку на BMF JSON.
⚖️ Размер файла
Команда CLI bencher run
может быть использована для отслеживания размера файла (т.е. размера бинарного файла) ваших продуктов с использованием опции --file-size
.
Опция --file-size
ожидает путь к файлу, размер которого будет измерен.
Внутри, bencher run
выводит результаты в формате Bencher Metric Format (BMF) JSON.
Поэтому рекомендуется явно использовать адаптер json
.
Для получения дополнительной информации смотрите как отслеживать размер файла.
Измеряется file-size
Measure (т.е. bytes (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 сохраняется в файл, поэтому вы должны использовать аргумент --file
командной строки bencher run
, чтобы указать путь к этому файлу.
Есть два варианта для метрики:
среднее
(по умолчанию):нижнее_значение
иверхнее_значение
находятся на одно стандартное отклонение ниже и выше среднего значения (то естьзначение
) соответственно.медиана
:нижнее_значение
иверхнее_значение
находятся на один межквартильный размах ниже и выше медианы (то естьзначение
) соответственно.
Это может быть указано в подкоманде CLI запуск bencher
с опцией --average
.
➕ C++ Catch2
Адаптер C++ Catch2 (cpp_catch2
) ожидает вывод Catch2.
Измеряется latency
(то есть наносекунды (ns)
).
lower_value
и upper_value
являются одним стандартным отклонением ниже и выше среднего значения (то есть value
) соответственно.
➕ C++ Google
Адаптер C++ Google (cpp_google
) ожидает вывод Google Benchmark в формате JSON (т.е. --benchmark_format=json
).
Измеряется latency
(т.е. наносекунды (ns)).
Доступно только среднее значение (т.е. value
). lower_value
и upper_value
отсутствуют.
🕳 Go Bench
Адаптер Go Bench (go_bench
) ожидает вывод go test -bench.
Собирается мера latency
(т.е. наносекунды (ns)
).
Доступно только среднее значение (т.е. value
). Нет lower_value
и upper_value
.
☕️ Java JMH
Адаптер Java JMH (java_jmh
) ожидает вывод Java Microbenchmark Harness (JMH) в формате JSON (т.е. -rf json
).
Этот вывод в формате JSON сохраняется в файл, поэтому вы должны использовать аргумент --file
командной строки bencher run
, чтобы указать путь к этому файлу.
Могут быть собраны показатели как latency
, так и throughput
(т.е. наносекунды (ns)
и операции в секунду (ops/sec)
).
lower_value
и upper_value
являются нижним и верхним доверительными интервалами для среднего значения (т.е. value
) соответственно.
🕸 JavaScript-бенчмарк
Адаптер JavaScript-бенчмарка (js_benchmark
) ожидает вывод Benchmark.js.
Измеряется пропускная способность
(т. е. операции в секунду (ops/sec)
).
lower_value
и upper_value
- это относительные погрешности ниже и выше медианы (т.е. value
) соответственно.
🕸 Время в JavaScript
Адаптер времени JavaScript (js_time
) ожидает вывод console.time/console.timeEnd.
Собирается мера latency
(то есть наносекунды (ns)
).
Доступно только время операции (то есть value
). Нет lower_value
и upper_value
.
🐍 Python ASV
Адаптер Python ASV (python_asv
) работает с выводом командной строки airspeed velocity (asv run).
Измеряется latency
(то есть наносекунды (ns)
).
lower_value
и upper_value
— это интерквартильный размах ниже и выше медианы (то есть value
) соответственно.
🐍 Python Pytest
Адаптер Python Pytest (python_pytest
) ожидает вывод pytest-benchmark в формате JSON (то есть --benchmark-json results.json
).
Этот вывод в формате JSON сохраняется в файл, поэтому вы должны использовать аргумент --file
командной строки bencher run
, чтобы указать путь к этому файлу.
Собирается мера latency
(то есть наносекунды (ns)
).
Существует два варианта для Метрики:
mean
(по умолчанию):lower_value
иupper_value
находятся на одно стандартное отклонение ниже и выше среднего значения (то естьvalue
) соответственно.median
:lower_value
иupper_value
находятся в одном межквартильном интервале ниже и выше медианы (то естьvalue
) соответственно.
Это может быть указано в подкоманде CLI bencher run
с помощью необязательного аргумента --average
.
♦️ Benchmark для Ruby
Адаптер бенчмарка Ruby (ruby_benchmark
) ожидает вывод модуля Benchmark для методов #bm
, #bmbm
и #benchmark
.
Для каждого бенчмарка требуется метка.
Измеряется latency
(т.е. наносекунды (ns)
).
Доступно только сообщаемое значение (т.е. value
). Нет lower_value
и upper_value
.
🦀 Rust Bench
Адаптер Rust Bench (rust_bench
) ожидает вывод libtest bench.
Измеряется latency
(то есть наносекунды (ns)
).
lower_value
и upper_value
представляют собой отклонения ниже и выше медианы (то есть value
) соответственно.
🦀 Rust Criterion
Адаптер Rust Criterion (rust_criterion
) ожидает вывод Criterion.
Измеряется latency
(то есть наносекунды (ns)
).
lower_value
и upper_value
являются нижней и верхней границами либо наклона (если доступно), либо среднего значения (если нет) (то есть 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 сохраняется в файл, поэтому вы должны использовать аргумент --file
CLI bencher run
, чтобы указать путь к этому файлу.
Измеряется latency
(т.е. наносекунды (ns)
).
Существует два варианта для метрики:
mean
(по умолчанию):lower_value
иupper_value
находятся на одно стандартное отклонение ниже и выше среднего значения (т.е.value
) соответственно.median
:lower_value
иupper_value
являются соответственноmin
иmax
значениями.
Это можно указать в подкоманде CLI bencher run
с опцией --average
.
🐰 Поздравляем! Вы узнали все об адаптерах для профилировки производительности! 🎉