Adaptadores de Arnés de Referencia


Los adaptadores convierten la salida del arnés de referencia en JSON estandarizado, Formato de Métrica Bencher (BMF). Los adaptadores se ejecutan en el servidor de la API cuando se recibe un nuevo informe. Vea la descripción general de la evaluación comparativa para obtener una explicación más detallada. Se pueden especificar en el subcomando CLI de bencher run con la opción --adapter. Si no se especifica un adaptador, se utiliza el adaptador magic por defecto.

Es mejor usar el adaptador más específico para su caso de uso. Esto proporcionará el análisis más preciso y eficiente. Por ejemplo, si estás analizando la salida de la prueba de bancos libtest bench de Rust, deberías usar el adaptador rust_bench, y no el adaptador magic o rust. Vea nuestro página de rendimiento de Bencher para una buena comparación.

🪄 Magic (default)

El adaptador Magic (magic) es un superset de todos los demás adaptadores. Por esto, es el adaptador por defecto para bencher run, pero se utiliza mejor solo para la exploración. En CI, deberías usar el adaptador más específico para tu caso de uso.

{…} JSON

El adaptador JSON (json) espera JSON BMF. Es perfecto para integrar arneses de referencia personalizados con Bencher.

Ejemplo de BMF:

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

En este ejemplo, la clave benchmark_name sería el nombre de una referencia. Los nombres de las referencias pueden ser cualquier cadena no vacía de hasta 1024 caracteres. El objeto benchmark_name contiene los alias de Measure o UUIDs como claves. En este ejemplo, latency es el slug para Latency Measure. Cada proyecto por defecto tiene una Latencia (es decir latency) y Throughput (es decir throughput) Measure, que se miden en nanosegundos (ns) y operaciones / segundo (ops/s) respectivamente. El objeto Measure contiene una Métrica con hasta tres medidas: value, lower_value y upper_value. Las medidas lower_value y upper_value son opcionales, y su cálculo es específico del arnés de referencia.

En este ejemplo, el objeto Latency Measure contiene las siguientes medidas:

  • Un value de 88.0
  • Un lower_value de 87.42
  • Un upper_value de 88.88

Si el JSON BMF se almacena en un archivo, entonces puedes usar el subcomando CLI de bencher run con el argumento opcional --file para especificar esa ruta de archivo. Esto funciona tanto con un comando de referencia (ejemplo: bencher run "bencher mock > results.json" --file results.json) y sin un comando de referencia (ejemplo: 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

🐰 Nota: El subcomando de la CLI bencher mock genera Metrics de BMF simuladas.

#️⃣ C#

El adaptador C# (c_sharp) es un superset de c_sharp_dot_net.

#️⃣ C# DotNet

El adaptador C# DotNet (c_sharp_dot_net) espera la salida de BenchmarkDotNet en formato JSON (es decir --exporters json). Se recoge la Latency Measure (es decir nanosecond (ns)).

Hay dos opciones para la Measure:

  • mean (por defecto): lower_value y upper_value son una desviación estándar por debajo y por encima de la media (es decir value), respectivamente.
  • median: lower_value y upper_value son un rango intercuartílico por debajo y por encima de la mediana (es decir value), respectivamente.

Esto se puede especificar en el subcomando CLI de bencher run con la bandera opcional --average.

➕ C++

El adaptador C++ (cpp) es un superset de cpp_catch2 y cpp_google.

➕ C++ Catch2

El adaptador C++ Catch2 (cpp_catch2) espera la salida de Catch2. Se recoge la Latency Measure (nanosecond (ns)). lower_value y upper_value son una desviación estándar por debajo y por encima de la media (es decir value), respectivamente.

➕ C++ Google

El adaptador C++ Google (cpp_google) espera la salida de Google Benchmark en formato JSON (es decir --benchmark_format=json). Se recoge la Latency Measure (nanosecond (ns)). Solo está disponible la media (es decir value). No hay lower_value y upper_value.

🕳 Go

El adaptador Go (go) es un superset de go_bench.

🕳 Go Bench

El adaptador Go Bench (go_bench) espera la salida de go test -bench. Se recoge la Latency Measure (nanosecond (ns)). Solo está disponible la media (es decir value). No hay lower_value y upper_value.

☕️ Java

El adaptador Java (java) es un superset de java_jmh.

☕️ Java JMH

El adaptador Java JMH (java_jmh) espera el resultado de Java Microbenchmark Harness (JMH) en formato JSON (es decir -rf json). Ambas Metrics Kinds, latency y throughput (es decir, nanoseconds (ns) y operations / second (ops/sec)), pueden ser recogidas. lower_value y upper_value son los intervalos de confianza inferior y superior para la media (es decir value), respectivamente.

🕸 JavaScript

El adaptador JavaScript (js) es un superset de js_benchmark y js_time.

🕸 JavaScript Benchmark

El adaptador JavaScript Benchmark (js_benchmark) espera la salida de Benchmark.js. Se recoge la Throughput Measure (operations / second (ops/sec)). lower_value y upper_value son el margen de error relativo por debajo y por encima de la mediana (es decir value), respectivamente.

🕸 JavaScript Time

El adaptador JavaScript Time (js_time) espera la salida de console.time/console.timeEnd. La Latency Measure (nanoseconds (ns)) se recoge. Solo está disponible el tiempo de operación (es decir value). No hay lower_value y upper_value.

🐍 Python

El adaptador Python (python) es un superset de python_asv y python_pytest.

🐍 Python ASV

El adaptador Python ASV (python_asv) espera la salida de la CLI airspeed velocity asv run. La Latency Measure (nanosecond (ns)) se recoge. lower_value y upper_value son el rango interquartil por debajo y por encima de la mediana (es decir value), respectivamente.

🐍 Python Pytest

El adaptador Python Pytest (python_pytest) espera la salida de pytest-benchmark en formato JSON (es decir --benchmark-json results.json). Esta salida JSON se guarda en un archivo, por lo que debes usar el argumento --file del CLI de bencher run para especificar esa ruta de archivo (es decir bencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py"). La Measure latency (nanoseconds (ns)) se recoge.

Hay dos opciones para la Metric:

  • mean (por defecto): lower_value y upper_value son una desviación estándar por debajo y por encima de la media (es decir value), respectivamente.
  • median: lower_value y upper_value son un rango intercuartílico por debajo y por encima de la mediana (es decir value), respectivamente.

Esto se puede especificar en el subcomando CLI de bencher run con el argumento opcional --average.

♦️ Ruby

El adaptador Ruby (ruby) es un superset de ruby_benchmark.

♦️ Ruby Benchmark

El adaptador Ruby Benchmark (ruby_benchmark) espera la salida del módulo Benchmark para los métodos #bm, #bmbm y #benchmark. Se requiere una etiqueta para cada benchmark. La Latency Measure (nanosecond (ns)) se recoge. Solo está disponible el valor reportado (es decir value). No hay lower_value y upper_value.

🦀 Rust

El adaptador Rust (rust) es un superset de rust_bench y rust_criterion.

🦀 Rust Bench

El adaptador Rust Bench (rust_bench) espera la salida de libtest bench. La Latency Measure (nanoseconds (ns)) se recoge. lower_value y upper_value son la desviación por debajo y por encima de la mediana (es decir value), respectivamente.

🦀 Rust Criterion

El adaptador Rust Criterion (rust_criterion) espera la salida de Criterion. La Latency Measure (nanosecond (ns)) se recoge. lower_value y upper_value son los límites inferior y superior ya sea de la pendiente (si está disponible) o de la media (si no) (es decir value), respectivamente.

🦀 Rust Iai

El adaptador Rust Iai (rust_iai) espera la salida de Iai. Se recogen las Latency Measures instructions, l1_access, l2_access, ram_access, y estimated_cycles. Solo estas medidas (es decir value) están disponibles. No hay medidas lower_value y upper_value. Las Measures para este adaptador no se crean por defecto para todos los proyectos. Sin embargo, cuando utilices este adaptador, estas Measures se crearán automáticamente para tu Proyecto.

🦀 Rust Iai-Callgrind

El Adaptador Rust Iai (rust_iai_callgrind) espera la salida de Iai-Callgrind. Se recopilan las medidas instructions, l1_access, l2_access, ram_access, total_accesses, y estimated_cycles. Solo estas medidas (es decir, value) están disponibles. No hay medidas de lower_value y upper_value. Las medidas para este adaptador no se crean por defecto para todos los proyectos. Sin embargo, cuando usas este adaptador, estas medidas se crearán automáticamente para tu proyecto.

❯_ Shell

El Adaptador Shell (shell) es un superconjunto de shell_hyperfine.

❯_️ Shell Hyperfine

El Adaptador Shell Hyperfine (shell_hyperfine) espera Hyperfine en formato JSON (es decir --export-json results.json). Esta salida en JSON se guarda en un archivo, por lo que debe usar el argumento --file de la CLI bencher run para especificar esa ruta de archivo (es decir, bencher run --file results.json "hyperfine --export-json results.json 'sleep 0.1'"). Se recopila el Tipo de Métrica latency (es decir, nanoseconds (ns)).

Existen dos opciones para la Métrica:

  • mean (por defecto): El lower_value y el upper_value son una desviación estándar por debajo y por encima de la media (es decir, value) respectivamente.
  • median: El lower_value y el upper_value son los valores min y max respectivamente.

Esto se puede especificar en el subcomando CLI bencher run con la flag opcional --average.



🐰 ¡Felicidades! ¡Has aprendido todo sobre los adaptadores de arneses de referencia! 🎉


Continúa: Umbrales y Alertas ➡

🤖 Este documento fue generado automáticamente por OpenAI GPT-4. Puede que no sea exacto y contenga errores. Si encuentra algún error, abra un problema en GitHub.