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.
🪄 Magic (Standard)
Der Magic-Adapter (magic) ist eine Obermenge aller anderen Adapter.
Aus diesem Grund ist er der Standard-Adapter für bencher run.
Der magic-Adapter sollte jedoch nur zur Erkundung verwendet werden.
Für beste Ergebnisse sollten Sie einen 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 Gungraun
- ❯_ 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.
bencher run --adapter json "bencher mock"⏱️ 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.
bencher run --adapter json --build-time "echo 0 > binary"⚖️ 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.
bencher run --adapter json --file-size binary "echo 0 > binary"#️⃣ 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.
bencher run --adapter c_sharp_dot_net --file results.json "dotnet run --exporters json --filter '*'"Es gibt zwei Optionen für die Metrik:
- mean(Standard): Die- lower_valueund- upper_valuesind eine Standardabweichung unter und über dem Mittelwert (d.h.- value) entsprechend.
- median: Die- lower_valueund- upper_valuesind 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).
bencher run --adapter cpp_catch2 "make benchmarks"➕ 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.
bencher run --adapter cpp_google "make benchmarks --benchmark_format=json"🕳 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.
bencher run --adapter go_bench "go test -bench"☕️ 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.
bencher run --adapter java_jmh --file results.json "java -jar benchmarks.jar -rf json -rff results.json"🕸 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.
bencher run --adapter js_benchmark "node benchmarks.js"🕸 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.
bencher run --adapter js_time "node benchmarks.js"🐍 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).
bencher run --adapter python_asv "asv run"🐍 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.
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"Es gibt zwei Optionen für die Metrik:
- mean(Standard): Der- lower_valueund- upper_valueliegen eine Standardabweichung unter bzw. über dem Mittelwert (d.h.- value).
- median: Der- lower_valueund- upper_valueliegen 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.
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"🦀 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.
bencher run --adapter rust_bench "cargo +nightly bench"🦀 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.
bencher run --adapter rust_criterion "cargo bench"🦀 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.
bencher run --adapter rust_iai "cargo bench"🦀 Rust Gungraun
Der Rust-Gungraun-Adapter (rust_gungraun) erwartet die Ausgabe von Gungraun.
Die Measures instructions, l1-hits, l2-hits, ram-hits, total-read-write und estimated-cycles werden standardmäßig erfasst. Zusätzlich werden von Gungraun erzeugte Callgrind-, Cachegrind- und DHAT-Metriken unterstützt.
Für diese Measures ist nur der gemeldete Wert (d. h. value) verfügbar.
Weder lower_value noch upper_value werden erfasst.
Die Measures für diesen Adapter werden nicht standardmäßig für alle Projekte angelegt.
Wenn Sie diesen Adapter verwenden, werden diese Measures jedoch automatisch für Ihr Project angelegt.
Gungraun ist der umbenannte Nachfolger von Iai-Callgrind.
bencher run --adapter rust_gungraun "cargo bench"🦀 Rust Iai-Callgrind
Iai-Callgrind wurde in Gungraun umbenannt.
❯_️ 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.
bencher run --adapter shell_hyperfine --file results.json "hyperfine --export-json results.json 'sleep 0.1'"Es gibt zwei Optionen für die Metrik:
- mean(Standard): Der- lower_valueund- upper_valueliegen jeweils eine Standardabweichung unter bzw. über dem Mittelwert (dh- value).
- median: Der- lower_valueund- upper_valuesind jeweils die- minund- maxWerte.
Dies kann im bencher run CLI-Unterbefehl mit der --average Option angegeben werden.
🐰 Herzlichen Glückwunsch! Sie haben alles über Benchmark-Harness-Adapter gelernt! 🎉