Адаптеры для профилировщиков


Адаптеры преобразуют выходные данные инструментальной среды тестирования производительности в JSON формате Bencher Metric Format (BMF). Адаптеры работают на сервере API, когда получен новый отчет. Смотрите обзор тестирования производительности для получения более подробной информации. Адаптер можно указать для подкоманды CLI the bencher run с опцией --adapter. Если адаптер не указан, по умолчанию используется адаптер magic.

🪄 Магия (по умолчанию)

Адаптер Magic (magic) является надмножеством всех других адаптеров. По этой причине он используется в качестве адаптера по умолчанию для bencher run. Однако адаптер magic следует использовать только для исследовательских целей.

Для наилучших результатов вы должны указать адаптер фреймворка для бенчмарков:


{…} 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, эта мера будет автоматически создана для вашего проекта.


#️⃣ C# DotNet

Адаптер C# DotNet (c_sharp_dot_net) ожидает вывод BenchmarkDotNet в формате JSON (то есть --exporters json). Измеряется задержка (то есть наносекунды (ns)).

Есть два варианта для метрики:

  • среднее (по умолчанию): нижнее_значение и верхнее_значение находятся на одно стандартное отклонение ниже и выше среднего значения (то есть значение) соответственно.
  • медиана: нижнее_значение и верхнее_значение находятся на один межквартильный размах ниже и выше медианы (то есть значение) соответственно.

Это может быть указано в подкоманде 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). Могут быть собраны показатели как 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, чтобы указать путь к этому файлу (например, bencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py"). Собирается мера 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_access, l2_access, ram_access и estimated_cycles. Доступны только эти показатели (т.е. value). Нет показателей lower_value и upper_value. Показатели для этого адаптера не создаются по умолчанию для всех проектов. Однако, когда вы используете этот адаптер, эти показатели будут автоматически созданы для вашего проекта.

🦀 Rust Iai-Callgrind

Адаптер Rust Iai (rust_iai_callgrind) работает с выводом Iai-Callgrind. Собираются данные по instructions, l1_access, l2_access, ram_access, total_accesses и estimated_cycles. Доступны только эти измерения (т.е. value). Нет измерений lower_value и upper_value. Измерения для этого адаптера не создаются автоматически для всех проектов. Однако, при использовании этого адаптера, эти измерения будут автоматически созданы для вашего проекта.


❯_️ Shell Hyperfine

Адаптер Shell Hyperfine (shell_hyperfine) ожидает вывод Hyperfine в формате JSON (т.е. --export-json results.json). Этот вывод JSON сохраняется в файл, поэтому вы должны использовать аргумент --file CLI bencher run, чтобы указать путь к этому файлу (например, bencher run --file results.json "hyperfine --export-json results.json 'sleep 0.1'"). Измеряется latency (т.е. наносекунды (ns)).

Существует два варианта для метрики:

  • mean (по умолчанию): lower_value и upper_value находятся на одно стандартное отклонение ниже и выше среднего значения (т.е. value) соответственно.
  • median: lower_value и upper_value являются соответственно min и max значениями.

Это можно указать в подкоманде CLI bencher run с опцией --average.



🐰 Поздравляем! Вы узнали все об адаптерах для профилировки производительности! 🎉


Продолжайте изучение материал: Пороговые значения и уведомления ➡

🤖 Этот документ был автоматически создан OpenAI GPT-4. Оно может быть неточным и содержать ошибки. Если вы обнаружите какие-либо ошибки, откройте проблему на GitHub.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Thu, May 9, 2024 at 5:17:00 PM UTC