Benchmark-Harness-Adapter


Adapter konvertieren die Ausgabe von Benchmark-Harnesses in standardisiertes JSON, das Bencher-Messformat (BMF). Die Adapter laufen auf dem API-Server, wenn ein neuer Bericht empfangen wird. Eine ausführlichere Erklärung finden Sie in der Benchmarking-Übersicht. Sie können im bencher run CLI-Unterbefehl mit der optionalen --adapter-Flag festgelegt werden. Wenn kein Adapter angegeben ist, wird standardmäßig der magic-Adapter verwendet.

Es ist am besten, den für Ihren Anwendungsfall spezifischsten Adapter zu verwenden. Dies wird das genaueste und leistungsfähigste Parsen bieten. Wenn Sie beispielsweise die Ausgabe von Rust libtest bench parsen, sollten Sie den rust_bench-Adapter verwenden, und nicht den magic- oder rust-Adapter. Siehe unsere Bencher Perfektionsseite für einen guten Vergleich.

🪄 Magic (Standard)

Der Magic-Adapter (magic) ist ein Superset aller anderen Adapter. Aus diesem Grund ist er der Standardadapter für bencher run, aber er sollte nur für die Erkundung verwendet werden. In CI sollten Sie den spezifischsten Adapter für Ihren Anwendungsfall verwenden.

{…} JSON

Der JSON-Adapter (json) erwartet BMF JSON. Er ist perfekt für die Integration von benutzerdefinierten Benchmark-Harnesses mit Bencher.

Beispiel für BMF:

{
"benchmark_name": {
"latency": {
"value": 88.0,
"lower_value": 87.42,
"upper_value": 88.88
}
}
}

In diesem Beispiel wäre der Schlüssel benchmark_name der Name eines Benchmarks. Benchmark-Namen können jeder nicht-leere String bis zu 1024 Zeichen sein. Das benchmark_name-Objekt enthält Metrikarten-Slugs oder UUIDs als Schlüssel. In diesem Beispiel ist latency der Slug für die Latenz-Metrikart. Jedes Projekt hat standardmäßig eine Latenz (d.h. latency) und Durchsatz (d.h. throughput) Metrikart, die in Nanosekunden (ns) und Operationen/Sekunde (ops/s) gemessen werden. Das Metrikarart-Objekt enthält eine Metrik mit bis zu drei Maßnahmen: value, lower_value und upper_value. Die lower_value und upper_value-Maßnahmen sind optional, und ihre Berechnung ist spezifisch für den Benchmark-Harness.

In diesem Beispiel enthält das latency-Metrikart-Objekt die folgenden Maßnahmen:

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

Wenn das BMF JSON in einer Datei gespeichert ist, dann können Sie den bencher run CLI-Unterbefehl mit dem optionalen --file-Argument verwenden, um diesen Dateipfad anzugeben. Dies funktioniert sowohl mit einem Benchmark-Befehl (z.B.: bencher run "bencher mock > results.json" --file results.json) als auch ohne einen Benchmark-Befehl (z.B.: bencher mock > results.json && bencher run --file results.json).

description: Benchmark Name
type: object
additionalProperties:
description: Measure Name, Slug, or UUID
type: object
properties:
value:
type: number
format: float
required: true
lower_value:
type: number
format: float
required: false
upper_value:
type: number
format: float
required: false

🐰 Hinweis: Der bencher mock CLI-Unterbefehl erzeugt Mock-BMF-Metriken.

#️⃣ C

Der C#-Adapter (c_sharp) ist ein Superset von c_sharp_dot_net.

#️⃣ C# DotNet

Der C# DotNet-Adapter (c_sharp_dot_net) erwartet BenchmarkDotNet Ausgabe im JSON-Format (d.h. --exporters json). Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt.

Es gibt zwei Optionen für die Metrik:

  • mean (Standard): Die lower_value und upper_value sind eine Standardabweichung unter bzw. über dem Durchschnitt (d.h. value).
  • median: Die lower_value und upper_value sind ein Interquartilabstand unter bzw. über dem Median (d.h. value).

Dies kann im bencher run CLI-Unterbefehl mit der optionalen --average-Flag festgelegt werden.

➕ C++

Der C++-Adapter (cpp) ist ein Superset von cpp_catch2 und cpp_google.

➕ C++ Catch2

Der C++ Catch2-Adapter (cpp_catch2) erwartet Catch2 Ausgabe. Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Die lower_value und upper_value sind eine Standardabweichung unter bzw. über dem Durchschnitt (d.h. value).

➕ C++ Google

Der C++ Google-Adapter (cpp_google) erwartet Google Benchmark Ausgabe im JSON-Format (d.h. --benchmark_format=json). Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Nur der Durchschnitt (d. h. value) ist verfügbar. Es gibt keine lower_value und upper_value.

🕳 Go

Der Go-Adapter (go) ist ein Superset von go_bench.

🕳 Go Bench

Der Go Bench-Adapter (go_bench) erwartet go test -bench Ausgabe. Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Nur der Durchschnitt (d. h. value) ist verfügbar. Es gibt keine lower_value und upper_value.

☕️ Java

Der Java-Adapter (java) ist ein Superset von java_jmh.

☕️ Java JMH

Der Java JMH-Adapter (java_jmh) erwartet Java Microbenchmark Harness (JMH) Ausgabe im JSON-Format (d.h. -rf json). Sowohl latency und throughput Metrikarten (d.h. Nanosekunden (ns) und Operationen/Sekunde (ops/sec)) können ermittelt werden. Die lower_value und upper_value sind die unteren und oberen Konfidenzintervalle für den Durchschnitt (d.h. value).

🕸 JavaScript

Der JavaScript-Adapter (js) ist ein Superset von js_benchmark und js_time.

🕸 JavaScript Benchmark

Der JavaScript Benchmark-Adapter (js_benchmark) erwartet Benchmark.js Ausgabe. Die throughput Metrikart (d.h. Operationen/Sekunde (ops/sec)) wird ermittelt. Die lower_value und upper_value sind der relative Fehlerbereich unter bzw. über dem Median (d.h. value).

🕸 JavaScript Time

Der JavaScript Time-Adapter (js_time) erwartet console.time/console.timeEnd Ausgabe. Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Nur die Betriebszeit (d. h. value) ist verfügbar. Es gibt keine lower_value und upper_value.

🐍 Python

Der Python-Adapter (python) ist ein Superset von python_asv und python_pytest.

🐍 Python ASV

Der Python ASV-Adapter (python_asv) erwartet airspeed velocity CLI asv run Ausgabe. Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Die lower_value und upper_value sind der Interquartilbereich unter bzw. über dem Median (d. h. value).

🐍 Python Pytest

Der Python Pytest-Adapter (python_pytest) erwartet pytest-benchmark Ausgabe im JSON-Format (d.h. --benchmark-json results.json). Diese JSON-Ausgabe wird in einer Datei gespeichert, sodass Sie das bencher run CLI --file-Argument verwenden müssen, um diesen Dateipfad anzugeben (d.h. bencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py"). Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt.

Es gibt zwei Optionen für die Metrik:

  • mean (Standard): Die lower_value und upper_value sind eine Standardabweichung unter bzw. über dem Durchschnitt (d.h. value).
  • median: Die lower_value und upper_value sind ein Interquartilbereich unter bzw. über dem Median (d.h. value).

Dies kann im bencher run CLI-Unterbefehl mit dem optionalen --average-Argument festgelegt werden.

♦️ Ruby

Der Ruby-Adapter (ruby) ist ein Superset von ruby_benchmark.

♦️ Ruby Benchmark

Der Ruby Benchmark-Adapter (ruby_benchmark) erwartet die Benchmark-Modul Ausgabe für die #bm, #bmbm, und #benchmark-Methoden. Ein Label ist für jeden Benchmark erforderlich. Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Nur der gemeldete Wert (d. h. value) ist verfügbar. Es gibt keine lower_value und upper_value.

🦀 Rust

Der Rust-Adapter (rust) ist ein Superset von rust_bench und rust_criterion.

🦀 Rust Bench

Der Rust Bench-Adapter (rust_bench) erwartet libtest bench Ausgabe. Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Die lower_value und upper_value sind die Abweichung unter bzw. über dem Median (d.h. value).

🦀 Rust Criterion

Der Rust Criterion-Adapter (rust_criterion) erwartet Criterion Ausgabe. Die latency Metrikart (d.h. Nanosekunden (ns)) wird ermittelt. Die lower_value und upper_value sind die unteren und oberen Grenzen der Steigung (falls verfügbar) oder des Durchschnitts (falls nicht) (d.h. value).

🦀 Rust Iai

Der Rust Iai-Adapter (rust_iai) erwartet Iai Ausgabe. Die Metrikarten instructions, l1_access, l2_access, ram_access, und estimated_cycles werden ermittelt. Nur diese Maßnahmen (d. h. value) sind verfügbar. Es gibt keine lower_value und upper_value Maßnahmen. Die Metrikarten für diesen Adapter werden nicht standardmäßig für alle Projekte erstellt. Wenn Sie diesen Adapter jedoch verwenden, werden diese Metrikarten automatisch für Ihr Projekt erstellt.

🦀 Rust Iai-Callgrind

Der Rust Iai-Adapter (rust_iai_callgrind) erwartet Iai-Callgrind Ausgabe. Die Messungen instructions, l1_access, l2_access, ram_access, total_accesses und estimated_cycles werden gesammelt. Nur diese Messungen (also value) sind verfügbar. Es gibt keine Messungen für lower_value und upper_value. Die Messungen für diesen Adapter werden nicht standardmäßig für alle Projekte erstellt. Wenn Sie jedoch diesen Adapter verwenden, werden diese Messungen automatisch für Ihr Projekt erstellt.

❯_ Shell

Der Shell Adapter (shell) ist eine Obermenge von shell_hyperfine.

❯_️ Shell Hyperfine

Der Shell Hyperfine Adapter (shell_hyperfine) erwartet Hyperfine Ausgabe im JSON Format (also --export-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 (also bencher run --file results.json "hyperfine --export-json results.json 'sleep 0.1'"). Die latency Messart (also nanoseconds (ns)) wird erfasst.

Es gibt zwei Optionen für die Metrik:

  • mean (Standard): Die lower_value und upper_value sind jeweils eine Standardabweichung unter und über dem Durchschnitt (also value).
  • median: Die lower_value und upper_value sind die min und max Werte jeweils.

Dies kann in der bencher run CLI Unterbefehl mit der optionalen --average Flag angegeben werden.



🐰 Herzlichen Glückwunsch! Sie haben alles über Benchmark-Harness-Adapter gelernt! 🎉


Weiter geht’s: Schwellenwerte & Warnungen ➡

🤖 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: Wed, March 27, 2024 at 7:50:00 AM UTC