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

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.

Terminal window
bencher run --adapter json "bencher mock"

⚖️ 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.

Terminal window
bencher run --adapter json --file-size binary "echo 0 > binary"

#️⃣ 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.

Terminal window
bencher run --adapter c_sharp_dot_net --file results.json "dotnet run --exporters json --filter '*'"

Existem duas opções para a Métrica:

  • média (padrão): Os valores inferior e superior são um desvio padrão abaixo e acima da média (ou seja, valor), respectivamente.
  • mediana: Os valores inferior e superior 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.

Terminal window
bencher run --adapter cpp_catch2 "make benchmarks"

➕ 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.

Terminal window
bencher run --adapter cpp_google "make benchmarks --benchmark_format=json"

🕳 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.

Terminal window
bencher run --adapter go_bench "go test -bench"

☕ 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.

Terminal window
bencher run --adapter java_jmh --file results.json "java -jar benchmarks.jar -rf json -rff results.json"

🕸 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.

Terminal window
bencher run --adapter js_benchmark "node benchmarks.js"

🕸 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.

Terminal window
bencher run --adapter js_time "node benchmarks.js"

🐍 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.

Terminal window
bencher run --adapter python_asv "asv run"

🐍 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.

Terminal window
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"

Há duas opções para a Métrica:

  • média (padrão): Os valores lower_value e upper_value são um desvio padrão abaixo e acima da média (ou seja, value) respectivamente.
  • mediana: Os valores lower_value e upper_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.

Terminal window
bencher run --adapter ruby_benchmark "ruby benchmarks.rb"

🦀 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.

Terminal window
bencher run --adapter rust_bench "cargo +nightly bench"

🦀 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.

Terminal window
bencher run --adapter rust_criterion "cargo bench"

🦀 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.

Terminal window
bencher run --adapter rust_iai "cargo bench"

🦀 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.

Terminal window
bencher run --adapter rust_iai_callgrind "cargo bench"

❯_️ 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.

Terminal window
bencher run --adapter shell_hyperfine --file results.json "hyperfine --export-json results.json 'sleep 0.1'"

Existem duas opções para a Métrica:

  • mean (padrão): Os valores lower_value e upper_value são um desvio padrão abaixo e acima da média (por exemplo, value) respectivamente.
  • median: Os valores lower_value e upper_value são os valores min e max 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! 🎉


Continue: Benchmarking Contínuo ➡

🤖 Este documento foi gerado automaticamente pelo OpenAI GPT-4. Pode não ser preciso e pode conter erros. Se você encontrar algum erro, abra um problema no GitHub.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Thu, May 9, 2024 at 5:17:00 PM UTC