벤치마크 하네스 어댑터


어댑터는 벤치마크 하네스 출력을 표준화된 JSON, Bencher Metric Format (BMF)로 변환합니다. 어댑터는 새 보고서가 수신되었을 때 API 서버에서 실행됩니다. 더 깊은 설명을 위해 벤치마크 개요를 참조하세요. 이들은 선택적 --adapter 플래그를 사용하여 bencher run CLI 서브커맨드에서 지정할 수 있습니다. 어댑터가 지정되지 않으면, 기본적으로 the magic 어댑터가 사용됩니다.

가장 특정한 어댑터를 사용하는 것이 최선입니다. 이것은 가장 정확하고 빠른 파싱을 제공합니다. 예를 들어, Rust libtest bench 출력을 파싱하는 경우, magic 또는 rust 어댑터가 아닌 rust_bench 어댑터를 사용해야 합니다. 좋은 비교를 위해 저희 Bencher perf 페이지 를 참조하세요.

Benchmark Adapter Comparison for Bencher - Bencher

🪄 Magic (default)

Magic 어댑터(magic)는 모든 다른 어댑터의 슈퍼셋입니다. 그 이유로, magicbencher run이 실행될 때의 기본 어댑터입니다, 하지만 이는 탐색을 위한 것으로만 사용되어야 합니다. CI에서는, 사용 사례에 가장 특정한 어댑터를 사용해야 합니다.

{…} JSON

JSON 어댑터(json)는 BMF JSON을 기대합니다. 사용자 정의 벤치마크 하네스와 Bencher를 통합하는 데 이상적입니다.

BMF 예시:

{
    "benchmark_name": {
        "latency": {
            value: 88.0,
            lower_value: 87.42,
            upper_value: 88.88
        }
    }
}

이 예시에서, 키 benchmark_name은 벤치마크의 이름이 될 것입니다. 벤치마크 이름은 1024자까지의 비어있지 않은 문자열이 될 수 있습니다. benchmark_name 객체는 Metric Kind의 축약명 또는 UUIDs를 키로 포함합니다. 이 예시에서, latency는 Latency Metric Kind의 축약명입니다. 각 프로젝트는 기본적으로 Latency(즉, latency)와 Throughput(즉, throughput) Metric Kind를 가지고 있으며, 이 두 개는 각각 나노초 (ns)초당 작업 수 (ops/s)로 측정됩니다. Metric Kind 객체는 최대 세 가지 측정치를 포함하는 Metric을 포함합니다: value, lower_value, upper_value. lower_valueupper_value 측정치는 선택적이며, 그 계산은 벤치마크 하네스에 특정합니다.

이 예시에서, latency Metric Kind 객체는 다음 측정치를 포함합니다:

  • value88.0
  • lower_value87.42
  • upper_value88.88

만약 BMF JSON이 파일에 저장되어 있다면, 그 파일 경로를 지정하기 위해 선택적 --file 인수를 사용하여 bencher run CLI 서브커맨드를 사용할 수 있습니다. 이것은 벤치마크 커맨드(ex: bencher run "bencher mock > results.json" --file results.json)와 벤치마크 커맨드 없이도 동작합니다(ex: bencher mock > results.json && bencher run --file results.json).


🐰 참고: bencher mock CLI 서브커맨드는 모의 BMF 메트릭을 생성합니다.

#️⃣ C#

C# 어댑터(c_sharp)는 c_sharp_dot_net의 슈퍼셋입니다.

#️⃣ C# DotNet

C# DotNet 어댑터(c_sharp_dot_net)는 BenchmarkDotNet 출력을 JSON 포맷(즉, --exporters json)으로 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다.

메트릭에는 두 가지 옵션이 있습니다:

  • mean(기본값): lower_valueupper_value는 표준 편차 아래와 평균(즉, value) 위로 각각 있습니다.
  • 중앙값: lower_valueupper_value는 중앙값(즉, value) 아래와 위의 사분위범위로 각각 있습니다.

이것은 선택적 --average flag를 사용하여 bencher run CLI 서브커맨드에서 지정할 수 있습니다.

➕ C++

C++ 어댑터(cpp)는 cpp_catch2cpp_google의 슈퍼셋입니다.

➕ C++ Catch2

C++ Catch2 어댑터(cpp_catch2)는 Catch2 출력을 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. lower_valueupper_value는 평균(즉, value) 아래와 위의 표준 편차로 각각 있습니다.

➕ C++ Google

C++ Google 어댑터(cpp_google)는 Google Benchmark 출력을 JSON 포맷(즉, --benchmark_format=json)으로 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. 평균(즉, value)만 가능합니다. lower_valueupper_value가 없습니다.

🕳 Go

Go 어댑터(go)는 go_bench의 슈퍼셋입니다.

🕳 Go Bench

Go Bench 어댑터(go_bench)는 go test -bench 출력을 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. 평균(즉, value)만 가능합니다. lower_valueupper_value가 없습니다.

☕️ Java

Java 어댑터(java)는 java_jmh의 슈퍼셋입니다.

☕️ Java JMH

Java JMH 어댑터(java_jmh)는 Java Microbenchmark Harness (JMH) 출력을 JSON 포맷(즉, -rf json)으로 기대합니다. latency 그리고 throughput Metric Kinds(즉, 나노초 (ns) 그리고 초당 작업 / (ops/sec))이 수집될 수 있습니다. lower_valueupper_value는 평균(즉, value)에 대한 하한과 상한 신뢰 구간을 각각입니다.

🕸 JavaScript

JavaScript 어댑터(js)는 js_benchmarkjs_time의 슈퍼셋입니다.

🕸 JavaScript Benchmark

JavaScript Benchmark 어댑터(js_benchmark)는 Benchmark.js 출력을 기대합니다. throughput Metric Kind(즉, 초당 작업 (ops/sec))이 수집됩니다. lower_valueupper_value는 중앙값(즉, value) 아래와 위의 상대적 오차 범위로 각각 있습니다.

🕸 JavaScript Time

JavaScript Time 어댑터(js_time)는 console.time/console.timeEnd 출력을 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. 작업 시간(즉, value)만 가능합니다. lower_valueupper_value가 없습니다.

🐍 Python

Python 어댑터(python)는 python_asvpython_pytest의 슈퍼셋입니다.

🐍 Python ASV

Python ASV 어댑터(python_asv)는 airspeed velocity CLI asv run 출력을 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. lower_valueupper_value는 중앙값(즉, value) 아래와 위의 사분위범위로 각각 있습니다.

🐍 Python Pytest

Python Pytest 어댑터(python_pytest)는 pytest-benchmark 출력을 JSON 포맷(즉, --benchmark-json results.json)으로 기대합니다. 이 JSON 출력은 파일에 저장되므로, 파일 경로를 명시하기 위해 bencher run CLI --file 인자를 사용해야 합니다(즉, bencher run --file results.json "pipenv run pytest --benchmark-json results.json benchmarks.py"). latency Metric Kind(즉, 나노초 (ns))이 수집됩니다.

메트릭에는 두 가지 옵션이 있습니다:

  • mean(기본값): lower_valueupper_value는 표준 편차 아래와 평균(즉, value) 위로 각각 있습니다.
  • 중앙값: lower_valueupper_value는 중앙값(즉, value) 아래와 위의 사분위범위로 각각 있습니다.

이것은 선택적 --average 인자를 사용하여 bencher run CLI 서브커맨드에서 지정할 수 있습니다.

♦️ Ruby

Ruby 어댑터(ruby)는 ruby_benchmark의 슈퍼셋입니다.

♦️ Ruby Benchmark

Ruby Benchmark 어댑터(ruby_benchmark)는 Benchmark 모듈 출력을 기대합니다. 이것은 #bm, #bmbm, 그리고 #benchmark 메소드에 대한 것입니다. 각 벤치마크에는 레이블이 필요합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. 보고된 값(즉, value)만 가능합니다. lower_valueupper_value가 없습니다.

🦀 Rust

Rust 어댑터(rust)는 rust_benchrust_criterion의 슈퍼셋입니다.

🦀 Rust Bench

Rust Bench 어댑터(rust_bench)는 libtest bench 출력을 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. lower_valueupper_value는 중앙값(즉, value) 아래와 위의 편차로 각각 있습니다.

🦀 Rust Criterion

Rust Criterion 어댑터(rust_criterion)는 Criterion 출력을 기대합니다. latency Metric Kind(즉, 나노초 (ns))이 수집됩니다. lower_valueupper_value는 slope(가능한 경우) 또는 mean(그렇지 않으면)의 하한과 상한으로 각각 있습니다(즉, value).

🦀 Rust Iai

Rust Iai 어댑터(rust_iai)는 Iai 출력을 기대합니다. instructions, l1_access, l2_access, ram_access, 그리고 estimated_cycles Metric Kinds가 수집됩니다. 이_measure_(즉, value)만 가능합니다. lower_valueupper_value가 없습니다. 이 어댑터에 대한 Metric Kinds는 모든 프로젝트에 대해 기본적으로 생성되지 않습니다. 그러나, 이 어댑터를 사용하면, 이 Metric Kinds는 프로젝트에 대해 자동으로 생성됩니다.



🐰 축하합니다! 벤치마크 하네스 어댑터에 대해 모두 배웠습니다! 🎉


계속 진행하세요: 임계값 & 알림 ➡

🤖 이 문서는 OpenAI GPT-4에 의해 자동으로 생성되었습니다. 정확하지 않을 수도 있고 오류가 있을 수도 있습니다. 오류를 발견하면 GitHub에서 문제를 열어주세요.