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


Адаптеры преобразуют выходные данные инструментальной среды тестирования производительности в 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.

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

Terminal window
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 можно использовать несколько раз для отслеживания размеров нескольких файлов.

Terminal window
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, чтобы указать путь к этому файлу.

Terminal window
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) соответственно.

Terminal window
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 отсутствуют.

Terminal window
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.

Terminal window
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) соответственно.

Terminal window
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) соответственно.

Terminal window
bencher run --adapter js_benchmark "node benchmarks.js"

🕸 Время в JavaScript

Адаптер времени JavaScript (js_time) ожидает вывод console.time/console.timeEnd. Собирается мера latency (то есть наносекунды (ns)). Доступно только время операции (то есть value). Нет lower_value и upper_value.

Terminal window
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) соответственно.

Terminal window
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)).

Terminal window
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.

Terminal window
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"

🦀 Rust Bench

Адаптер Rust Bench (rust_bench) ожидает вывод libtest bench. Измеряется latency (то есть наносекунды (ns)). lower_value и upper_value представляют собой отклонения ниже и выше медианы (то есть value) соответственно.

Terminal window
bencher run --adapter rust_bench "cargo +nightly bench"

🦀 Rust Criterion

Адаптер Rust Criterion (rust_criterion) ожидает вывод Criterion. Измеряется latency (то есть наносекунды (ns)). lower_value и upper_value являются нижней и верхней границами либо наклона (если доступно), либо среднего значения (если нет) (то есть value) соответственно.

Terminal window
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. Показатели для этого адаптера не создаются по умолчанию для всех проектов. Однако, когда вы используете этот адаптер, эти показатели будут автоматически созданы для вашего проекта.

Terminal window
bencher run --adapter rust_iai "cargo bench"

🦀 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. Измерения для этого адаптера не создаются автоматически для всех проектов. Однако, при использовании этого адаптера, эти измерения будут автоматически созданы для вашего проекта.

Terminal window
bencher run --adapter rust_iai_callgrind "cargo bench"

❯_️ Shell Hyperfine

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

Terminal window
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.



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


Продолжайте: Непрерывное Бенчмаркинг ➡

🤖 Этот документ был автоматически создан 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