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

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.

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

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

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

Terminal window
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_value und upper_value sind eine Standardabweichung unter und über dem Mittelwert (d.h. value) entsprechend.
  • median: Die lower_value und upper_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).

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

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

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

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

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

Terminal window
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).

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

Terminal window
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_value und upper_value liegen eine Standardabweichung unter bzw. über dem Mittelwert (d.h. value).
  • median: Der lower_value und upper_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.

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

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

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

Terminal window
bencher run --adapter rust_iai "cargo bench"

🦀 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.

Terminal window
bencher run --adapter rust_iai_callgrind "cargo bench"

❯_️ 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.

Terminal window
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_value und upper_value liegen jeweils eine Standardabweichung unter bzw. über dem Mittelwert (dh value).
  • median: Der lower_value und upper_value sind jeweils die min und max 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! 🎉


Weitermachen: Kontinuierliches Benchmarking ➡

🤖 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: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Thu, May 9, 2024 at 5:17:00 PM UTC