Benchmark-Harness-Adapter
Adapter konvertieren die Ausgabe des Benchmark-Harness in das Bencher Metric Format (BMF) JSON.
Die Adapter werden auf dem API-Server ausgeführt, wenn ein neuer Bericht eingeht.
Weitere Details finden Sie in der Übersicht über das Benchmarking.
Ein Adapter kann für den bencher run
CLI-Unterbefehl
mit der Option --adapter
angegeben werden.
Wenn kein Adapter angegeben wird, wird standardmäßig der magic
Adapter verwendet.
🪄 Magie (Standard)
Der Magic-Adapter (magic
) ist ein Superset aller anderen Adapter.
Aus diesem Grund ist er der Standardadapter für bencher run
.
Allerdings sollte der magic
Adapter nur zur Exploration verwendet werden.
Für die besten Ergebnisse sollten Sie einen spezifischen Benchmark-Harness-Adapter angeben:
- {…} JSON
- #️⃣ C# BenchmarkDotNet
- ➕ C++ Catch2
- ➕ C++ Google Benchmark
- 🕳 Go test -bench
- ☕️ Java Microbenchmark Harness (JMH)
- 🕸 JavaScript Benchmark.js
- 🕸 JavaScript console.time/console.timeEnd
- 🐍 Python airspeed velocity (asv)
- 🐍 Python pytest-benchmark
- ♦️ Ruby Benchmark
- 🦀 Rust libtest bench
- 🦀 Rust Criterion
- 🦀 Rust Iai
- 🦀 Rust Iai-Callgrind
- ❯_ Shell Hyperfine
{…} JSON
Der JSON-Adapter (json
) erwartet Bencher Metric Format (BMF) JSON.
Er ist perfekt für die Integration von benutzerdefinierten Benchmark-Harnesses mit Bencher geeignet.
Für weitere Details siehe wie man benutzerdefinierte Benchmarks verfolgt
und die BMF JSON Referenz.
⏱️ Buildzeit
Der bencher run
CLI-Subbefehl
kann mit dem --build-time
-Flag verwendet werden, um die Buildzeit (d. h. Kompilierzeit) Ihrer Auslieferungen zu verfolgen.
Im Hintergrund gibt bencher run
die Ergebnisse als Bencher Metric Format (BMF) JSON aus.
Es ist daher gute Praxis, den JSON-Adapter explizit zu verwenden.
Weitere Details finden Sie unter wie man die Buildzeit verfolgt.
Die build-time
-Messung (d. h. Sekunden (s)
) wird erfasst.
Nur der Buildzeitwert (d. h. value
) ist verfügbar.
Weder lower_value
noch upper_value
werden erfasst.
Die build-time
-Messung wird nicht standardmäßig für alle Projekte erstellt.
Wenn Sie jedoch das --build-time
-Flag verwenden, wird diese Messung automatisch für Ihr Projekt erstellt.
⚖️ Dateigröße
Der bencher run
CLI-Unterbefehl
kann verwendet werden, um die Dateigröße (d.h. Binärgröße) Ihrer Lieferobjekte mit der Option --file-size
zu verfolgen.
Die Option --file-size
erwartet einen Dateipfad zu der Datei, deren Größe gemessen wird.
Unter der Haube gibt bencher run
die Ergebnisse alsBencher-Metrik-Format (BMF) JSON aus.
Es ist daher ratsam, ausdrücklich den json
-Adapter zu verwenden.
Für weitere Details siehe wie man die Dateigröße verfolgt.
Die file-size
-Messung (d.h. Bytes (B)
) wird erfasst.
Nur der Wert der Dateigröße (d.h. value
) ist verfügbar.
Weder lower_value
noch upper_value
werden gesammelt.
Die file-size
-Messung wird nicht standardmäßig für alle Projekte erstellt.
Wenn Sie jedoch die Option --file-size
verwenden, wird diese Messung automatisch für Ihr Projekt erstellt.
Die Option --file-size
kann mehrfach verwendet werden, um mehrere Dateigrößen zu verfolgen.
#️⃣ C# DotNet
Der C# DotNet Adapter (c_sharp_dot_net
) erwartet BenchmarkDotNet-Ausgabe im JSON-Format (d.h. --exporters json
).
Die latency
-Messung (d.h. Nanosekunden (ns)
) wird gesammelt.
Diese JSON-Ausgabe wird in einer Datei gespeichert, daher müssen Sie das bencher run
CLI --file
Argument verwenden, um diesen Dateipfad anzugeben.
Es gibt zwei Optionen für die Metrik:
mean
(Standard): Dielower_value
undupper_value
sind eine Standardabweichung unter und über dem Mittelwert (d.h.value
) entsprechend.median
: Dielower_value
undupper_value
sind einen Interquartilabstand unter und über dem Median (d.h.value
) entsprechend.
Dies kann im bencher run
CLI-Unterbefehl mit der Option --average
angegeben werden.
➕ C++ Catch2
Der C++ Catch2 Adapter (cpp_catch2
) erwartet Catch2-Ausgabe.
Die latency
Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Die lower_value
und upper_value
sind jeweils eine Standardabweichung unter und über dem Mittelwert (d.h. value
).
➕ C++ Google
Der C++ Google Adapter (cpp_google
) erwartet Ausgaben von Google Benchmark im JSON-Format (d.h. --benchmark_format=json
).
Die latency
Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Nur der Durchschnittswert (d.h. value
) ist verfügbar. Es gibt keinen lower_value
und keinen upper_value
.
🕳 Go Bench
Der Go Bench Adapter (go_bench
) erwartet go test -bench Ausgabe.
Das latency
Maß (d.h. Nanosekunden (ns)
) wird erfasst.
Nur der Mittelwert (d.h. Wert
) ist verfügbar. Es gibt keinen lower_value
und upper_value
.
☕️ Java JMH
Der Java-JMH-Adapter (java_jmh
) erwartet Ausgaben des Java Microbenchmark Harness (JMH) im JSON-Format (d.h. -rf json
).
Diese JSON-Ausgabe wird in einer Datei gespeichert, daher müssen Sie das bencher run
CLI --file
Argument verwenden, um diesen Dateipfad anzugeben.
Es können sowohl latency
als auch throughput
Messungen (d.h. Nanosekunden (ns)
und Operationen / Sekunde (ops/sec)
) erfasst werden.
Die lower_value
und upper_value
sind die unteren und oberen Konfidenzintervalle für den Mittelwert (d.h. value
) bzw.
🕸 JavaScript-Benchmark
Der JavaScript-Benchmark-Adapter (js_benchmark
) erwartet eine Ausgabe von Benchmark.js.
Die throughput
Messung (d.h. Operationen / Sekunde (ops/sec)
) wird gesammelt.
Die lower_value
und upper_value
sind die relative Fehlerspanne unterhalb und oberhalb des Medianwerts (d.h. value
) bzw.
🕸 JavaScript-Zeit
Der JavaScript-Zeit-Adapter (js_time
) erwartet console.time/console.timeEnd-Ausgaben.
Die latency
-Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Nur die Operationszeit (d.h. Wert
) ist verfügbar. Es gibt keine lower_value
und upper_value
.
🐍 Python ASV
Der Python ASV-Adapter (python_asv
) erwartet die Ausgabe des airspeed velocity CLI-Befehls asv run.
Die latency
-Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Die lower_value
und upper_value
sind das untere und obere Interquartil, jeweils unterhalb und oberhalb des Medians (d.h. value
).
🐍 Python Pytest
Der Python Pytest Adapter (python_pytest
) erwartet pytest-benchmark Ausgaben im JSON-Format (d.h. --benchmark-json results.json
).
Diese JSON-Ausgabe wird in einer Datei gespeichert, daher müssen Sie das bencher run
CLI --file
Argument verwenden, um diesen Dateipfad anzugeben.
Die latency
Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Es gibt zwei Optionen für die Metrik:
mean
(Standard): Derlower_value
undupper_value
liegen eine Standardabweichung unter bzw. über dem Mittelwert (d.h.value
).median
: Derlower_value
undupper_value
liegen einen Interquartilsabstand unter bzw. über dem Median (d.h.value
).
Dies kann im bencher run
CLI Unterbefehl mit dem optionalen --average
Argument angegeben werden.
♦️ Ruby Benchmark
Der Ruby Benchmark Adapter (ruby_benchmark
) erwartet die Ausgabe des Benchmark-Moduls für die Methoden #bm
, #bmbm
und #benchmark
.
Ein Label ist für jeden Benchmark erforderlich.
Die Latenz
-Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Nur der berichtete Wert (d.h. Wert
) ist verfügbar. Es gibt keinen unteren_wert
und oberen_wert
.
🦀 Rust Bench
Der Rust Bench Adapter (rust_bench
) erwartet eine Ausgabe von libtest bench.
Die latency
Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Der lower_value
und upper_value
sind die Abweichungen unterhalb und oberhalb des Medians (d.h. value
) jeweils.
🦀 Rust Criterion
Der Rust Criterion Adapter (rust_criterion
) erwartet Ausgaben von Criterion.
Die latency
Messung (d.h. Nanosekunden (ns)
) wird erfasst.
Die lower_value
und upper_value
sind die unteren und oberen Grenzwerte entweder der Steigung (falls verfügbar) oder des Mittelwerts (falls nicht) (d.h. Wert
) jeweils.
🦀 Rust Iai
Der Rust Iai-Adapter (rust_iai
) erwartet die Ausgabe von Iai.
Die Maße instructions
, l1-accesses
, l2-accesses
, ram-accesses
und estimated-cycles
werden erfasst.
Nur diese Maße (d.h. value
) sind verfügbar. Es gibt keine Maße für lower_value
und upper_value
.
Die Maße für diesen Adapter werden nicht standardmäßig für alle Projekte erstellt.
Wenn Sie jedoch diesen Adapter verwenden, werden diese Maße automatisch für Ihr Projekt erstellt.
🦀 Rust Iai-Callgrind
Der Rust Iai Adapter (rust_iai_callgrind
) erwartet eine Ausgabe von Iai-Callgrind.
Die Maße instructions
, l1-hits
, l2-hits
, ram-hits
, total-read-write
und estimated-cycles
werden gesammelt.
Nur diese Maße (d.h. value
) sind verfügbar. Es gibt keine Maße für lower_value
und upper_value
.
Die Maße für diesen Adapter werden nicht standardmäßig für alle Projekte erstellt.
Wenn Sie diesen Adapter jedoch verwenden, werden diese Maße automatisch für Ihr Projekt erstellt.
❯_️ Shell Hyperfine
Der Shell Hyperfine Adapter (shell_hyperfine
) erwartet Hyperfine-Ausgaben im JSON-Format (dh --export-json results.json
).
Diese JSON-Ausgabe wird in einer Datei gespeichert, daher müssen Sie das --file
Argument der bencher run
CLI verwenden, um diesen Dateipfad anzugeben.
Die latency
Messung (dh Nanosekunden (ns)
) wird erfasst.
Es gibt zwei Optionen für die Metrik:
mean
(Standard): Derlower_value
undupper_value
liegen jeweils eine Standardabweichung unter bzw. über dem Mittelwert (dhvalue
).median
: Derlower_value
undupper_value
sind jeweils diemin
undmax
Werte.
Dies kann im bencher run
CLI-Unterbefehl mit der --average
Option angegeben werden.
🐰 Herzlichen Glückwunsch! Sie haben alles über Benchmark-Harness-Adapter gelernt! 🎉