Adaptadores de Ferramenta de Benchmark
Os adaptadores convertem a saída do harness de benchmark para o formato JSON do Bencher Metric Format (BMF).
Os adaptadores são executados no servidor da API quando um novo relatório é recebido.
Veja a visão geral de benchmarking para mais detalhes.
Um adaptador pode ser especificado para o subcomando CLI bencher run
com a opção --adapter
.
Se nenhum adaptador for especificado, o adaptador magic
é usado por padrão.
🪄 Magia (padrão)
O Adaptador Mágico (magic
) é um superconjunto de todos os outros adaptadores.
Por essa razão, ele é o adaptador padrão para bencher run
.
No entanto, o adaptador magic
deve ser usado apenas para exploração.
Para melhores resultados, você deve especificar um adaptador de suporte de benchmark:
- {…} JSON
- #️⃣ C# BenchmarkDotNet
- ➕ C++ Catch2
- ➕ C++ Google Benchmark
- 🕳 Go test -bench
- ☕️ Java Microbenchmark Harness (JMH)
- 🕸 JavaScript Benchmark.js
- 🕸 JavaScript console.time/console.timeEnd
- 🐍 Python airspeed velocity (asv)
- 🐍 Python pytest-benchmark
- ♦️ Ruby Benchmark
- 🦀 Rust libtest bench
- 🦀 Rust Criterion
- 🦀 Rust Iai
- 🦀 Rust Iai-Callgrind
- ❯_ Shell Hyperfine
{…} JSON
O Adaptador JSON (json
) espera Bencher Metric Format (BMF) JSON.
É perfeito para integrar sistemas de benchmark personalizados com o Bencher.
Para mais detalhes, veja como rastrear benchmarks personalizados
e a referência BMF JSON.
⏱️ Build Time
O subcomando de CLI bencher run
pode ser usado para rastrear o tempo de build (ou seja, tempo de compilação) dos seus entregáveis com a flag --build-time
.
Nos bastidores, bencher run
produz os resultados como Bencher Metric Format (BMF) JSON.
Portanto, é uma boa prática usar explicitamente o adaptador json
.
Para mais detalhes, veja como rastrear o tempo de build.
A Medida build-time
(ou seja, segundos (s)
) é coletada.
Apenas o valor do tempo de build (ou seja, value
) está disponível.
Nem lower_value
nem upper_value
são coletados.
A Medida build-time
não é criada por padrão para todos os Projetos.
No entanto, quando você usa a flag --build-time
, esta Medida será criada automaticamente para o seu Projeto.
⚖️ Tamanho do Arquivo
O subcomando CLI bencher run
pode ser utilizado para acompanhar o tamanho do arquivo (ou seja, tamanho do binário) de seus entregáveis com a opção --file-size
.
A opção --file-size
espera um caminho de arquivo para o arquivo cujo tamanho será medido.
Por baixo dos panos, bencher run
exibe os resultados comoFormato de Métrica Bencher (BMF) JSON.
Portanto, é uma boa prática utilizar explicitamente o adaptador json
.
Para mais detalhes, veja como acompanhar o tamanho do arquivo.
A Medida file-size
(ou seja, bytes (B)
) é coletada.
Apenas o valor do tamanho do arquivo (ou seja, valor
) está disponível.
Nem lower_value
nem upper_value
são coletados.
A Medida file-size
não é criada por padrão para todos os Projetos.
No entanto, quando você usa a opção --file-size
, essa Medida será automaticamente criada para o seu Projeto.
A opção --file-size
pode ser usada várias vezes para rastrear múltiplos tamanhos de arquivo.
#️⃣ C# DotNet
O Adaptador C# DotNet (c_sharp_dot_net
) espera a saída do BenchmarkDotNet no formato JSON (ou seja, --exporters json
).
A Medida de latência
(ou seja, nanossegundos (ns)
) é coletada.
Essa saída JSON é salva em um arquivo, então você deve usar o argumento --file
da CLI bencher run
para especificar o caminho desse arquivo.
Existem duas opções para a Métrica:
média
(padrão): Os valoresinferior
esuperior
são um desvio padrão abaixo e acima da média (ou seja,valor
), respectivamente.mediana
: Os valoresinferior
esuperior
são um intervalo interquartil abaixo e acima da mediana (ou seja,valor
), respectivamente.
Isso pode ser especificado no subcomando CLI execução do bencher
com a opção --average
.
➕ C++ Catch2
O Adaptador C++ Catch2 (cpp_catch2
) espera a saída do Catch2.
A Medida de latency
(ou seja, nanosegundos (ns)
) é coletada.
Os valores 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 Google Benchmark no formato JSON (ou seja, --benchmark_format=json
).
A medida de latência
(ou seja, nanossegundos (ns)
) é coletada.
Apenas a média (ou seja, valor
) está disponível. Não existem valor_inferior
e valor_superior
.
🕳 Go Bench
O Adaptador Go Bench (go_bench
) espera um output de go test -bench.
A Medida de latência
(ou seja, nanosegundos (ns)
) é coletada.
Apenas a média (ou seja, valor
) está disponível. Não existem valor_inferior
e valor_superior
.
☕ Java JMH
O Adaptador Java JMH (java_jmh
) espera a saída do Java Microbenchmark Harness (JMH) em formato JSON (ou seja, -rf json
).
Essa saída JSON é salva em um arquivo, então você deve usar o argumento --file
da CLI bencher run
para especificar o caminho desse arquivo.
Medidas de latência
e vazão
(ou seja, nanosegundos (ns)
e operações / segundo (ops/sec)
) podem ser coletadas.
Os valores_inferior
e superior
são os intervalos de confiança inferior e superior para a média (ou seja, valor
) respectivamente.
🕸 Benchmark de JavaScript
O Adaptador de Benchmark de JavaScript (js_benchmark
) espera a saída do Benchmark.js.
A medida de throughput
(ou seja, operações / segundo (ops/sec)
) é coletada.
Os valores lower_value
e upper_value
são a margem de erro relativa abaixo e acima da mediana (ou seja, value
), respectivamente.
🕸 Hora em JavaScript
O Adaptador de Tempo em JavaScript (js_time
) espera a saída de console.time/console.timeEnd.
A medida de latência
(ou seja, nanossegundos (ns)
) é coletada.
Apenas o tempo de operação (ou seja, valor
) está disponível. Não existem valor_inferior
e valor_superior
.
🐍 Python ASV
O Adaptador Python ASV (python_asv
) espera a saída do CLI airspeed velocity asv run.
A Medida de latência
(ou seja, nanossegundos (ns)
) é coletada.
Os valores lower_value
e upper_value
são o intervalo interquartílico abaixo e acima da mediana (ou seja, value
), respectivamente.
🐍 Python Pytest
O Adaptador Pytest do Python (python_pytest
) espera a saída do pytest-benchmark em formato JSON (ou seja --benchmark-json results.json
).
Essa saída JSON é salva em um arquivo, então você deve usar o argumento --file
da CLI bencher run
para especificar o caminho desse arquivo.
A Medida de latência
(ou seja, nanoseconds (ns)
) é coletada.
Há duas opções para a Métrica:
média
(padrão): Os valoreslower_value
eupper_value
são um desvio padrão abaixo e acima da média (ou seja,value
) respectivamente.mediana
: Os valoreslower_value
eupper_value
são um intervalo interquartil abaixo e acima da mediana (ou seja,value
) respectivamente.
Isso pode ser especificado no subcomando da CLI bencher run
com o argumento opcional --average
.
♦️ Benchmark do Ruby
O Adaptador de Benchmark do Ruby (ruby_benchmark
) espera a saída do módulo Benchmark para os métodos #bm
, #bmbm
, e #benchmark
.
Uma etiqueta é necessária para cada benchmark.
A Medida de latência
(ou seja, nanosegundos (ns)
) é coletada.
Apenas o valor reportado (ou seja, valor
) está disponível. Não existem valor_inferior
e valor_superior
.
🦀 Bench do Rust
O Adaptador de Bench do Rust (rust_bench
) espera a saída do bench do libtest.
A medida de latência
(ou seja, nanossegundos (ns)
) é coletada.
Os valores lower_value
e upper_value
são o desvio abaixo e acima da mediana (ou seja, value
) respectivamente.
🦀 Critério Rust
O Adaptador Criterion Rust (rust_criterion
) espera a saída do Criterion.
A Medida de latência
(ou seja, nanossegundos (ns)
) é coletada.
O valor_inferior
e o valor_superior
são os limites inferior e superior da inclinação (se disponível) ou da média (se não) (ou seja, valor
) respectivamente.
🦀 Rust Iai
O Adaptador Rust Iai (rust_iai
) espera uma saída Iai.
As Medidas instructions
, l1-accesses
, l2-accesses
, ram-accesses
, e estimated-cycles
são coletadas.
Apenas essas medidas (isto é, value
) estão disponíveis. Não existem medidas de lower_value
e upper_value
.
As Medidas para este adaptador não são criadas por padrão para todos os projetos.
No entanto, quando você usa esse adaptador, essas Medidas serão criadas automaticamente para o seu Projeto.
🦀 Rust Iai-Callgrind
O Adaptador Rust Iai (rust_iai_callgrind
) espera a saída Iai-Callgrind.
As Medidas instructions
, l1-hits
, l2-hits
, ram-hits
, total-read-write
e estimated-cycles
são coletadas.
Apenas estas medidas (ou seja, value
) estão disponíveis. Não há medidas de lower_value
e upper_value
.
As Medidas para este adaptador não são criadas por padrão para todos os projetos.
No entanto, quando você usa este adaptador, estas Medidas serão automaticamente criadas para o seu Projeto.
❯_️ Shell Hyperfine
O Adaptador Shell Hyperfine (shell_hyperfine
) espera a saída do Hyperfine no formato JSON (por exemplo, --export-json results.json
).
Essa saída JSON é salva em um arquivo, então você deve usar o argumento --file
da CLI bencher run
para especificar o caminho desse arquivo.
A Medida de latência
(por exemplo, nanosegundos (ns)
) é coletada.
Existem duas opções para a Métrica:
mean
(padrão): Os valoreslower_value
eupper_value
são um desvio padrão abaixo e acima da média (por exemplo,value
) respectivamente.median
: Os valoreslower_value
eupper_value
são os valoresmin
emax
respectivamente.
Isso pode ser especificado no subcomando CLI bencher run
com a opção --average
.
🐰 Parabéns! Você aprendeu tudo sobre adaptadores de ferramenta de benchmark! 🎉