Adaptadores de Ferramenta de Benchmark
Os adaptadores convertem a saída da ferramenta de benchmark em JSON padronizado, no Formato de Métrica do Bencher (BMF).
Os adaptadores são executados no servidor API quando um novo relatório é recebido.
Veja a visão geral do benchmarking para uma explicação mais aprofundada.
Eles podem ser especificados no subcomando bencher run
CLI com a flag opcional --adapter
.
Se nenhum adaptador estiver especificado, o adaptador magic
é usado por padrão.
É melhor usar o adaptador mais específico para o seu caso.
Isso fornecerá uma análise mais precisa e performática.
Por exemplo, se você está fazendo parse da saída do libtest bench em Rust
, você deve usar o adaptador rust_bench
, e não os adaptadores magic
ou rust
.
Veja nossa
página de desempenho do Bencher
para uma boa comparação.
🪄 Magic (padrão)
O Adaptador Magic (magic
) é um superconjunto de todos os outros adaptadores.
Por esse motivo, é o adaptador padrão para bencher run
,
mas é melhor usá-lo apenas para exploração.
No CI, você deve usar o adaptador mais específico para o seu caso.
{…} JSON
O Adaptador JSON (json
) espera um JSON no formato BMF.
É perfeito para integrar ferramentas de benchmark personalizadas com o Bencher.
Exemplo de BMF:
{
"benchmark_name": {
"latency": {
value: 88.0,
lower_value: 87.42,
upper_value: 88.88
}
}
}
Neste exemplo, a chave benchmark_name
seria o nome de um benchmark.
Os nomes do benchmark podem ser qualquer string não vazia de até 1024 caracteres.
O objeto benchmark_name
contém slugs de Tipo de Métrica ou UUIDs como chaves.
Neste exemplo, latency
é o slug para o Tipo de Métrica Latência.
Cada Projeto, por padrão, tem um Tipo de Métrica Latência (ou seja, latency
) e Throughput (ou seja, throughput
),
que são medidos em nanossegundo (ns)
e operações / segundo (ops/s)
respectivamente.
O objeto Tipo de Métrica contém uma Métrica com até três medidas: value
, lower_value
e upper_value
.
A lower_value
e upper_value
são opcionais,
e seu cálculo é específico para a ferramenta de benchmark.
Neste exemplo, o objeto Tipo de Métrica latency
contém as seguintes medidas:
- Uma
value
de88.0
- Uma
lower_value
de87.42
- Uma
upper_value
de88.88
Se o JSON BMF estiver armazenado em um arquivo,
então você pode usar o subcomando bencher run
CLI com o argumento opcional --file
para especificar esse caminho do arquivo.
Isso funciona tanto com um comando de benchmark (ex: bencher run "bencher mock > results.json" --file results.json
)
quanto sem um comando de benchmark (ex: bencher mock > results.json && bencher run --file results.json
).
🐰 Nota: O subcomando CLI
bencher mock
gera Métricas BMF falsas.
#️⃣ C#
O Adaptador C# (c_sharp
) é um superconjunto de c_sharp_dot_net
.
#️⃣ C# DotNet
O Adaptador C# DotNet (c_sharp_dot_net
) espera a saída do BenchmarkDotNet no formato JSON (ou seja, --exporters json
).
A Métrica de Tipo Latência (ou seja, nanosecond (ns)
) é coletada.
Existem duas opções para a Métrica:
mean
(padrão): Alower_value
eupper_value
estão uma desvio padrão abaixo e acima da média (ou seja,value
) respectivamente.median
: Alower_value
eupper_value
estão um intervalo interquartil abaixo e acima da mediana (ou seja,value
) respectivamente.
Isso pode ser especificado no subcomando bencher run
CLI com a flag opcional --average
.
➕ C++
O Adaptador C++ (cpp
) é um superconjunto de cpp_catch2
e cpp_google
.
➕ C++ Catch2
O Adaptador C++ Catch2 (cpp_catch2
) espera a saída do Catch2.
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
A lower_value
e upper_value
estão um desvio padrão abaixo e acima da média (ou seja, value
) respectivamente.
➕ C++ Google
O Adaptador C++ Google (cpp_google
) espera a saída do Google Benchmark no formato JSON (ou seja, --benchmark_format=json
).
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
Apenas a média (ou seja, value
) está disponível. Não existem lower_value
e upper_value
.
🕳 Go
O Adaptador Go (go
) é um superconjunto de go_bench
.
🕳 Go Bench
O Adaptador Go Bench (go_bench
) espera a saída do go test -bench.
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
Apenas a média (ou seja, value
) está disponível. Não existem lower_value
e upper_value
.
☕️ Java
O Adaptador Java (java
) é um superconjunto de java_jmh
.
☕️ Java JMH
O Adaptador Java JMH (java_jmh
) espera a saída do Java Microbenchmark Harness (JMH) no formato JSON (ou seja, -rf json
).
Os Tipos de Métrica latency
e throughput
(ou seja, nanoseconds (ns)
e operations / second (ops/sec)
) podem ser coletados.
A lower_value
e upper_value
são os intervalos de confiança inferior e superior para a média (ou seja, value
) respectivamente.
🕸 JavaScript
O Adaptador JavaScript (js
) é um superconjunto de js_benchmark
e js_time
.
🕸 JavaScript Benchmark
O Adaptador JavaScript Benchmark (js_benchmark
) espera a saída do Benchmark.js.
O Tipo de Métrica Throughput (ie operations / second (ops/sec)
) é coletado.
A lower_value
e upper_value
são a margem de erro relativo abaixo e acima da mediana (ou seja, value
) respectivamente.
🕸 JavaScript Time
O Adaptador JavaScript Time (js_time
) espera a saída do console.time/console.timeEnd.
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
Apenas o tempo de operação (ou seja, value
) está disponível. Não existem lower_value
e upper_value
.
🐍 Python
O Adaptador Python (python
) é um superconjunto de python_asv
e python_pytest
.
🐍 Python ASV
O Adaptador Python ASV (python_asv
) espera a saída da CLI airspeed velocity asv run.
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
A lower_value
e upper_value
são o intervalo interquartil abaixo e acima da mediana (ie value
) respectivamente.
🐍 Python Pytest
O Adaptador Python Pytest (python_pytest
) espera a saída do pytest-benchmark no formato JSON (ou seja, --benchmark-json results.json
).
Esta saída JSON é salva em um arquivo, portanto, você deve usar o argumento --file
do CLI bencher run
para especificar esse caminho do arquivo (ou seja, bencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py"
).
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
Existem duas opções para a Métrica:
mean
(default): Alower_value
eupper_value
estão uma desvio padrão abaixo e acima da média (ou seja,value
) respectivamente.median
: Alower_value
eupper_value
estão um intervalo interquartil abaixo e acima da mediana (ou seja,value
) respectivamente.
Isso pode ser especificado no subcomando bencher run
CLI com a argumento opcional --average
.
♦️ Ruby
O Adaptador Ruby (ruby
) é um superconjunto de ruby_benchmark
.
♦️ Ruby Benchmark
O Adaptador Ruby Benchmark (ruby_benchmark
) espera a saída do módulo Benchmark para os métodos #bm
, #bmbm
, e #benchmark
.
Um rótulo é necessário para cada benchmark.
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
Apenas o valor informado (ou seja, value
) está disponível. Não existem lower_value
e upper_value
.
🦀 Rust
O Adaptador Rust (rust
) é um superconjunto de rust_bench
e rust_criterion
.
🦀 Rust Bench
O Adaptador Rust Bench (rust_bench
) espera a saída do libtest bench.
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
A lower_value
e upper_value
são o desvio abaixo e acima da mediana (ou seja, value
) respectivamente.
🦀 Rust Criterion
O Adaptador Rust Criterion (rust_criterion
) espera a saída do Criterion.
O Tipo de Métrica Latência (ou seja, nanoseconds (ns)
) é coletado.
A lower_value
e upper_value
são os limites inferior e superior do gradiente (se disponível) ou da média (se não) (ou seja, value
) respectivamente.
🦀 Rust Iai
O Adaptador Rust Iai (rust_iai
) espera a saída do Iai.
Os Tipos de Métrica instructions
, l1_access
, l2_access
, ram_access
, e estimated_cycles
são coletados.
Apenas essas medidas (ou seja, value
) estão disponíveis. Não existem medidas lower_value
e upper_value
.
Os Tipos de Métrica para este adaptador não são criados por padrão para todos os projetos.
Entretanto, quando você usa este adaptador, esses Tipos de Métrica serão automaticamente criados para o seu Projeto.
🐰 Parabéns! Você aprendeu tudo sobre adaptadores de ferramenta de benchmark! 🎉