Wie man benutzerdefinierte Benchmarks mit Bencher verfolgt


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 value of 88.0
  • A lower_value of 87.42
  • An upper_value of 88.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:

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

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

Without a benchmark command:

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

Mehrere Messungen

Im Bencher-Metrik-Format (BMF) JSON kann das Benchmark-Objekt mehrere Measure-Namen, -Slugs oder UUIDs als Schlüssel enthalten. Wenn der angegebene Wert ein Name oder Slug ist und die Measure noch nicht existiert, wird sie für Sie erstellt. Wenn der angegebene Wert jedoch eine UUID ist, muss die Measure bereits existieren. Jedes Measure-Objekt muss ein Metric mit bis zu drei Werten enthalten: value, lower_value und upper_value. Die Werte lower_value und upper_value sind optional.

Dies ist ein Beispiel für BMF JSON mit mehreren Measures:

{
"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
}
}
}

In diesem Beispiel enthält das latency Measure-Objekt die folgenden Werte:

  • Ein value von 88.0
  • Ein lower_value von 87.42
  • Ein upper_value von 88.88

Und das throughput Measure-Objekt enthält die folgenden Werte:

  • Ein value von 5.55
  • Ein lower_value von 3.14
  • Ein upper_value von 6.30

Sie können das CLI-Unterkommando bencher mock mit der Option --measure verwenden, um gefälschte BMF-Daten mit mehreren Measures zu generieren. Wir verwenden es als Platzhalter für Ihren eigenen benutzerdefinierten Benchmark-Runner. Mit bencher run und dem Adapter json können wir unsere Benchmarks mit mehreren Measures mit dem folgenden Befehl verfolgen:

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

🐰 Glückwunsch! Du hast gelernt, wie man benutzerdefinierte Benchmarks verfolgt! 🎉


Weitermachen: Wie man Benchmarks in CI verfolgt ➡

🤖 Dieses Dokument wurde automatisch von OpenAI GPT-4 generiert. Es ist möglicherweise nicht korrekt und kann Fehler enthalten. Wenn Sie Fehler finden, öffnen Sie bitte ein Problem auf GitHub.


Published: Sun, May 12, 2024 at 7:44:00 AM UTC | Last Updated: Sun, October 13, 2024 at 12:27:00 PM UTC