Как отслеживать пользовательские бенчмарки с помощью 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
с помощью следующей команды:
bencher run --adapter json "bencher mock"Если ваши результаты были сохранены в файле под названием results.json,
то вы можете использовать опцию --file для указания пути к файлу.
Это работает как с командой бенчмарка, так и без неё.
С командой бенчмарка:
bencher run --file results.json --adapter json "bencher mock > results.json"Без команды бенчмарка:
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.0lower_valueравное87.42upper_valueравное88.88
А объект Измерения throughput содержит следующие значения:
valueравное5.55lower_valueравное3.14upper_valueравное6.30
Вы можете использовать подкоманду CLI bencher mock
с опцией --measure
для генерации фиктивных данных BMF с множественными Измерениями.
Мы будем использовать это как замену для вашего собственного кастомного бенчмарк-раннера.
Используя bencher run
и адаптер json
мы можем отслеживать наши бенчмарки с несколькими Измерениями с помощью следующей команды:
bencher run --adapter json "bencher mock --measure latency --measure throughput"🐰 Поздравляем! Вы научились отслеживать пользовательские бенчмарки! 🎉