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.

Comparativa de Adaptadores de Referencia para Bencher - Bencher

🪄 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 Metric Kind o UUIDs como claves. En este ejemplo, latency es el slug para Latency Metric Kind. Cada proyecto por defecto tiene una Latencia (es decir latency) y Throughput (es decir throughput) Metric Kind, que se miden en nanosegundos (ns) y operaciones / segundo (ops/s) respectivamente. El objeto Metric Kind 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 Metric Kind 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).


🐰 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 Metric Kind (es decir nanosecond (ns)).

Hay dos opciones para la Metric Kind:

  • 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 Metric Kind (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 Metric Kind (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 Metric Kind (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 Metric Kind (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 Metric Kind (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 Metric Kind (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 Metric Kind 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 Metric Kind (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 Metric Kind (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 Metric Kind (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 Metric Kinds 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 Metric Kinds para este adaptador no se crean por defecto para todos los proyectos. Sin embargo, cuando utilices este adaptador, estas Metric Kinds se crearán automáticamente para tu Proyecto.



🐰 ¡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.