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 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
de88.0
- Un
lower_value
de87.42
- Un
upper_value
de88.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
yupper_value
son una desviación estándar por debajo y por encima de la media (es decirvalue
), respectivamente.median
:lower_value
yupper_value
son un rango intercuartílico por debajo y por encima de la mediana (es decirvalue
), 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
yupper_value
son una desviación estándar por debajo y por encima de la media (es decirvalue
), respectivamente.median
:lower_value
yupper_value
son un rango intercuartílico por debajo y por encima de la mediana (es decirvalue
), 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! 🎉