Адаптеры для профилировщиков
Адаптеры преобразуют выходные данные инструментальной среды тестирования производительности в JSON формате Bencher Metric Format (BMF).
Адаптеры работают на сервере API, когда получен новый отчет.
Смотрите обзор тестирования производительности для получения более подробной информации.
Адаптер можно указать для подкоманды CLI the bencher run с опцией --adapter.
Если адаптер не указан, по умолчанию используется адаптер magic.
🪄 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 Gungraun
- ❯_ Shell Hyperfine
{…} JSON
Адаптер JSON (json) работает с JSON в формате Bencher Metric Format (BMF).
Он идеально подходит для интеграции пользовательских средств измерения производительности с Bencher.
Для более подробной информации смотрите как отслеживать пользовательские бенчмарки
и ссылку на BMF JSON.
bencher run --adapter json "bencher mock"⏱️ Build Time
Команда bencher run CLI
может быть использована для отслеживания времени сборки (то есть времени компиляции) ваших сборок с помощью флага --build-time.
Под капотом, bencher run
выводит результаты в формате Bencher Metric Format (BMF) JSON.
Поэтому хорошей практикой будет явное использование адаптера json.
Для получения дополнительной информации смотрите как отслеживать время сборки.
Собирается измерение build-time (то есть seconds (s)).
Доступно только значение времени сборки (то есть value).
Ни lower_value, ни upper_value не собираются.
Измерение build-time не создается по умолчанию для всех Проектов.
Однако, когда вы используете флаг --build-time, это измерение будет автоматически создано для вашего Проекта.
bencher run --adapter json --build-time "echo 0 > binary"⚖️ Размер файла
Команда 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 можно использовать несколько раз для отслеживания размеров нескольких файлов.
bencher run --adapter json --file-size binary "echo 0 > binary"#️⃣ C# DotNet
Адаптер C# DotNet (c_sharp_dot_net) ожидает вывод BenchmarkDotNet в формате JSON (то есть --exporters json).
Измеряется задержка (то есть наносекунды (ns)).
Этот вывод в формате JSON сохраняется в файл, поэтому вы должны использовать аргумент --file командной строки bencher run, чтобы указать путь к этому файлу.
bencher run --adapter c_sharp_dot_net --file results.json "dotnet run --exporters json --filter '*'"Есть два варианта для метрики:
среднее(по умолчанию):нижнее_значениеиверхнее_значениенаходятся на одно стандартное отклонение ниже и выше среднего значения (то естьзначение) соответственно.медиана:нижнее_значениеиверхнее_значениенаходятся на один межквартильный размах ниже и выше медианы (то естьзначение) соответственно.
Это может быть указано в подкоманде CLI запуск bencher с опцией --average.
➕ C++ Catch2
Адаптер C++ Catch2 (cpp_catch2) ожидает вывод Catch2.
Измеряется latency (то есть наносекунды (ns)).
lower_value и upper_value являются одним стандартным отклонением ниже и выше среднего значения (то есть value) соответственно.
bencher run --adapter cpp_catch2 "make benchmarks"➕ C++ Google
Адаптер C++ Google (cpp_google) ожидает вывод Google Benchmark в формате JSON (т.е. --benchmark_format=json).
Измеряется latency (т.е. наносекунды (ns)).
Доступно только среднее значение (т.е. value). lower_value и upper_value отсутствуют.
bencher run --adapter cpp_google "make benchmarks --benchmark_format=json"🕳 Go Bench
Адаптер Go Bench (go_bench) ожидает вывод go test -bench.
Собирается мера latency (т.е. наносекунды (ns)).
Доступно только среднее значение (т.е. value). Нет lower_value и upper_value.
bencher run --adapter go_bench "go test -bench"☕️ 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) соответственно.
bencher run --adapter java_jmh --file results.json "java -jar benchmarks.jar -rf json -rff results.json"🕸 JavaScript-бенчмарк
Адаптер JavaScript-бенчмарка (js_benchmark) ожидает вывод Benchmark.js.
Измеряется пропускная способность (т. е. операции в секунду (ops/sec)).
lower_value и upper_value - это относительные погрешности ниже и выше медианы (т.е. value) соответственно.
bencher run --adapter js_benchmark "node benchmarks.js"🕸 Время в JavaScript
Адаптер времени JavaScript (js_time) ожидает вывод console.time/console.timeEnd.
Собирается мера latency (то есть наносекунды (ns)).
Доступно только время операции (то есть value). Нет lower_value и upper_value.
bencher run --adapter js_time "node benchmarks.js"🐍 Python ASV
Адаптер Python ASV (python_asv) работает с выводом командной строки airspeed velocity (asv run).
Измеряется latency (то есть наносекунды (ns)).
lower_value и upper_value — это интерквартильный размах ниже и выше медианы (то есть value) соответственно.
bencher run --adapter python_asv "asv run"🐍 Python Pytest
Адаптер Python Pytest (python_pytest) ожидает вывод pytest-benchmark в формате JSON (то есть --benchmark-json results.json).
Этот вывод в формате JSON сохраняется в файл, поэтому вы должны использовать аргумент --file командной строки bencher run, чтобы указать путь к этому файлу.
Собирается мера latency (то есть наносекунды (ns)).
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"Существует два варианта для Метрики:
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.
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"🦀 Rust Bench
Адаптер Rust Bench (rust_bench) ожидает вывод libtest bench.
Измеряется latency (то есть наносекунды (ns)).
lower_value и upper_value представляют собой отклонения ниже и выше медианы (то есть value) соответственно.
bencher run --adapter rust_bench "cargo +nightly bench"🦀 Rust Criterion
Адаптер Rust Criterion (rust_criterion) ожидает вывод Criterion.
Измеряется latency (то есть наносекунды (ns)).
lower_value и upper_value являются нижней и верхней границами либо наклона (если доступно), либо среднего значения (если нет) (то есть value) соответственно.
bencher run --adapter rust_criterion "cargo bench"🦀 Rust Iai
Адаптер Rust Iai (rust_iai) ожидает вывод Iai.
Собираются показатели instructions, l1-accesses, l2-accesses, ram-accesses и estimated-cycles.
Доступны только эти показатели (т.е. value). Нет показателей lower_value и upper_value.
Показатели для этого адаптера не создаются по умолчанию для всех проектов.
Однако, когда вы используете этот адаптер, эти показатели будут автоматически созданы для вашего проекта.
bencher run --adapter rust_iai "cargo bench"🦀 Rust Gungraun
Адаптер Rust Gungraun (rust_gungraun) ожидает вывод Gungraun.
Метрики instructions, l1-hits, l2-hits, ram-hits, total-read-write и estimated-cycles собираются по умолчанию. Также поддерживаются дополнительные метрики Callgrind, Cachegrind и DHAT, которые может генерировать Gungraun.
Для этих Measures доступно только зарегистрированное значение (т.е. value).
Поля lower_value и upper_value не собираются.
Measures для этого адаптера не создаются по умолчанию для всех проектов.
Однако при использовании этого адаптера эти Measures будут автоматически созданы для вашего Project.
Gungraun — переименованный преемник Iai-Callgrind.
bencher run --adapter rust_gungraun "cargo bench"🦀 Rust Iai-Callgrind
Iai-Callgrind был переименован в Gungraun.
❯_️ Shell Hyperfine
Адаптер Shell Hyperfine (shell_hyperfine) ожидает вывод Hyperfine в формате JSON (т.е. --export-json results.json).
Этот вывод JSON сохраняется в файл, поэтому вы должны использовать аргумент --file CLI bencher run, чтобы указать путь к этому файлу.
Измеряется latency (т.е. наносекунды (ns)).
bencher run --adapter shell_hyperfine --file results.json "hyperfine --export-json results.json 'sleep 0.1'"Существует два варианта для метрики:
mean(по умолчанию):lower_valueиupper_valueнаходятся на одно стандартное отклонение ниже и выше среднего значения (т.е.value) соответственно.median:lower_valueиupper_valueявляются соответственноminиmaxзначениями.
Это можно указать в подкоманде CLI bencher run с опцией --average.
🐰 Поздравляем! Вы узнали все об адаптерах для профилировки производительности! 🎉