Wie man benutzerdefinierte Benchmarks mit Bencher verfolgt
Bencher unterstützt die beliebtesten Benchmarking-Harnesses direkt aus der Box heraus, und wir sind immer offen für Vorschläge für neue Adapter. Es kann jedoch Situationen geben, in denen ein fertiges Benchmarking-Harness nicht Ihren Anforderungen entspricht, was die Erstellung eines benutzerdefinierten Benchmarking-Harness erforderlich macht. Glücklicherweise unterstützt Bencher auch die Verwendung eines benutzerdefinierten Benchmarking-Harness. Der einfachste Weg, um Ihr benutzerdefiniertes Benchmark-Harness mit Bencher zu integrieren, ist die Ausgabe im Bencher Metric Format (BMF) JSON.
Dies ist ein Beispiel für BMF JSON:
{ "benchmark_name": { "latency": { "value": 88.0, "lower_value": 87.42, "upper_value": 88.88 } }}In diesem Beispiel ist der Schlüssel benchmark_name der Name eines Benchmarks.
Ein Benchmark kann anhand seines Namens, Slugs oder seiner UUID identifiziert werden.
Das benchmark_name-Objekt kann mehrere Measure-Namen, Slugs oder UUIDs als Schlüssel enthalten.
Wenn der angegebene Wert ein Name oder Slug ist und das Measure noch nicht existiert, wird es für Sie erstellt.
Ist der angegebene Wert jedoch eine UUID, muss das Measure bereits existieren.
In diesem Beispiel ist latency der Slug für das eingebaute Latency-Measure.
Jedes Projekt verfügt standardmäßig über ein Latency-Measure (d. h. latency) und ein Throughput-Measure (d. h. throughput), die jeweils in nanosecond (ns) bzw. operations / second (ops/s) gemessen werden.
Das Measure-Objekt enthält eine Metrik mit bis zu drei Werten: value, lower_value und upper_value.
Die Werte lower_value und upper_value sind optional.
In diesem Beispiel enthält das latency-Measure-Objekt die folgenden Werte:
- Ein
valuevon88.0 - Ein
lower_valuevon87.42 - Ein
upper_valuevon88.88
Wenn Sie ein Skript unter ./run/my/benchmarks.sh hätten, das Ihre Benchmarks ausführt
und die Ergebnisse als BMF JSON auf Standardausgabe druckt,
dann könnten Sie diese mit
bencher run
und dem json Adapter
mit dem folgenden Befehl verfolgen:
bencher run --adapter json "bencher mock"Wenn Ihre Ergebnisse stattdessen in einer Datei namens results.json gespeichert wurden,
dann könnten Sie die Option --file verwenden, um den Dateipfad anzugeben.
Dies funktioniert sowohl mit einem Benchmark-Befehl als auch ohne einen.
Mit einem Benchmark-Befehl:
bencher run --file results.json --adapter json "bencher mock > results.json"Ohne einen Benchmark-Befehl:
bencher mock > results.json && bencher run --file results.json --adapter jsonMehrere 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
valuevon88.0 - Ein
lower_valuevon87.42 - Ein
upper_valuevon88.88
Und das throughput Measure-Objekt enthält die folgenden Werte:
- Ein
valuevon5.55 - Ein
lower_valuevon3.14 - Ein
upper_valuevon6.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:
bencher run --adapter json "bencher mock --measure latency --measure throughput"🐰 Glückwunsch! Du hast gelernt, wie man benutzerdefinierte Benchmarks verfolgt! 🎉