Как отслеживать пользовательские бенчмарки с помощью Bencher


Bencher поддерживает самые популярные обвязки для бенчмаркинга “из коробки”, и мы всегда открыты к предложениям по добавлению новых адаптеров. Однако могут возникнуть ситуации, когда готовая обвязка для бенчмаркинга не соответствует вашим требованиям, что требует создания собственной обвязки для бенчмаркинга. К счастью для вас, Bencher также поддерживает использование собственной обвязки для бенчмаркинга. Самый простой способ интеграции вашей собственной обвязки для бенчмаркинга с Bencher заключается в выводе формата JSON метрик Bencher (BMF).

Это пример BMF JSON:

{
"benchmark_name": {
"latency": {
"value": 88.0,
"lower_value": 87.42,
"upper_value": 88.88
}
}
}

В этом примере ключ benchmark_name — это имя бенчмарка. Бенчмарк может быть идентифицирован по имени, slug или UUID. Объект benchmark_name может содержать в качестве ключей несколько имён, slug’ов или UUID для измерений. Если заданное значение — имя или slug, и соответствующее измерение ещё не существует, оно будет создано автоматически. Однако, если указано значение в виде UUID, то измерение должно уже существовать. В этом примере latency — это slug для встроенного измерения Latency. У каждого проекта по умолчанию есть измерение Latency (т.е. latency) и измерение Throughput (т.е. throughput), которые измеряются в nanosecond (ns) и operations / second (ops/s) соответственно. Объект измерения содержит метрику с максимум тремя значениями: value, lower_value и upper_value. Значения lower_value и upper_value являются необязательными.

В этом примере объект измерения latency содержит следующие значения:

  • Значение value: 88.0
  • Значение lower_value: 87.42
  • Значение upper_value: 88.88

Если у вас есть скрипт, расположенный в ./run/my/benchmarks.sh, который запускает ваши бенчмарки и выводит результаты в стандартный вывод как BMF JSON, то вы могли бы отслеживать их используя bencher run и адаптер json с помощью следующей команды:

Terminal window
bencher run --adapter json "bencher mock"

Если ваши результаты были сохранены в файле под названием results.json, то вы можете использовать опцию --file для указания пути к файлу. Это работает как с командой бенчмарка, так и без неё.

С командой бенчмарка:

Terminal window
bencher run --file results.json --adapter json "bencher mock > results.json"

Без команды бенчмарка:

Terminal window
bencher mock > results.json && bencher run --file results.json --adapter json

Множественные Измерения

В JSON формате метрики Bencher (BMF) объект Benchmark может содержать несколько имен, слоганов или UUID Measure в качестве ключей. Если указано имя или слоган и Измерение еще не существует, оно будет создано для вас. Однако, если указано значение UUID, то Измерение должно уже существовать. Каждый объект Измерения должен содержать Metric с до трех значений: value, lower_value и upper_value. Значения lower_value и upper_value являются необязательными.

Это пример JSON BMF с несколькими Измерениями:

{
"benchmark_name": {
"latency": {
"value": 88.0,
"lower_value": 87.42,
"upper_value": 88.88
},
"throughput" {
"value": 5.55,
"lower_value": 3.14,
"upper_value": 6.30
}
}
}

В этом примере объект Измерения latency содержит следующие значения:

  • value равное 88.0
  • lower_value равное 87.42
  • upper_value равное 88.88

А объект Измерения throughput содержит следующие значения:

  • value равное 5.55
  • lower_value равное 3.14
  • upper_value равное 6.30

Вы можете использовать подкоманду CLI bencher mock с опцией --measure для генерации фиктивных данных BMF с множественными Измерениями. Мы будем использовать это как замену для вашего собственного кастомного бенчмарк-раннера. Используя bencher run и адаптер json мы можем отслеживать наши бенчмарки с несколькими Измерениями с помощью следующей команды:

Terminal window
bencher run --adapter json "bencher mock --measure latency --measure throughput"

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


Продолжайте: Как отслеживать бенчмарки в CI ➡

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


Published: Sun, May 12, 2024 at 7:44:00 AM UTC | Last Updated: Fri, January 30, 2026 at 12:27:00 PM UTC