Как отслеживать пользовательские бенчмарки с помощью Bencher
Bencher supports the most popular benchmarking harnesses out-of-the-box, and we are always open to suggestions for new adapters. However there can be situations where an off-the-shelf benchmarking harness doesn’t fit your needs, necessitating the creation of a custom benchmarking harness. Lucky for you, Bencher also supports using a custom benchmarking harness. The easiest way to integrate your custom benchmark harness with Bencher is to output Bencher Metric Format (BMF) JSON.
This is an example of BMF JSON:
{ "benchmark_name": { "latency": { "value": 88.0, "lower_value": 87.42, "upper_value": 88.88 } }}In this example, the key benchmark_name would be the name of a Benchmark.
Benchmark names can be any non-empty string up to 1024 characters.
The benchmark_name object can contain multiple Measure names, slugs, or UUIDs as keys.
If the value specified is a name or slug and the Measure does not already exist, it will be created for you.
However, if the value specified is a UUID then the Measure must already exist.
In this example, latency is the slug for the built-in Latency Measure.
Each Project by default has a Latency (ie latency) and Throughput (ie throughput) Measure,
which are measured in nanosecond (ns) and operations / second (ops/s) respectively.
The Measure object contains a Metric with up to three values:
value, lower_value, and upper_value.
The lower_value and upper_value values are optional.
In this example, the latency Measure object contains the following values:
- A
valueof88.0 - A
lower_valueof87.42 - An
upper_valueof88.88
You can use the bencher mock CLI subcommand to generate mock BMF data.
We will use it as a placeholder for your own custom benchmark runner.
Using bencher run
and the json adapter
we can track our benchmarks with the following command:
bencher run --adapter json "bencher mock"If your results were instead stored in a file named results.json,
then you could use the --file option to specify the file path.
This works both with a benchmark command and without one.
With a benchmark command:
bencher run --file results.json --adapter json "bencher mock > results.json"Without a benchmark command:
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"🐰 Поздравляем! Вы научились отслеживать пользовательские бенчмарки! 🎉