벤치마크 하네스 어댑터
어댑터는 벤치마크 하네스 출력을 Bencher Metric Format (BMF) JSON으로 변환합니다.
새 보고서가 수신될 때 API 서버에서 어댑터가 실행됩니다.
자세한 내용은 벤치마킹 개요를 참조하세요.
어댑터는 --adapter
옵션으로 the bencher run
CLI 서브커맨드에 대해 지정할 수 있습니다.
어댑터가 지정되지 않은 경우 기본적으로 the magic
어댑터가 사용됩니다.
🪄 마법 (기본)
Magic Adapter (magic
)는 다른 모든 어댑터의 상위 집합입니다.
그런 이유로, 기본 어댑터로 bencher run
에 사용됩니다.
그러나, magic
어댑터는 탐색용으로만 사용해야 합니다.
최상의 결과를 위해, 벤치마크 하네스 어댑터를 지정해야 합니다:
- {…} 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
JSON 어댑터(json
)은 Bencher 메트릭 포맷 (BMF) JSON을 기대합니다.
이는 벤처와 맞춤 벤치마크 하네스를 통합하기에 완벽합니다.
자세한 내용은 맞춤 벤치마크 추적 방법과
BMF JSON 참조를 참조하세요.
⏱️ 빌드 시간
bencher run
CLI 서브커맨드는 --build-time
플래그와 함께 사용하여, 배포물의 빌드 시간(즉, 컴파일 시간)을 추적할 수 있습니다. 내부적으로 bencher run
은 결과를 Bencher Metric Format (BMF) JSON으로 출력합니다. 따라서 명시적으로 the json
adapter을 사용하는 것이 좋습니다. 자세한 내용은 빌드 시간 추적 방법을 참조하세요.
build-time
측정치(즉, 초 (s)
)는 수집됩니다. 빌드 시간 값(즉, value
)만 사용할 수 있습니다. lower_value
나 upper_value
는 수집되지 않습니다. build-time
측정치는 모든 프로젝트에 기본적으로 생성되지 않습니다. 그러나 --build-time
플래그를 사용하면 이 측정치는 프로젝트에 자동으로 생성됩니다.
⚖️ 파일 크기
bencher run
CLI 서브커맨드는 --file-size
옵션을 사용하여
배포하는 파일(즉, 바이너리 크기)의 크기를 추적하는 데 사용될 수 있습니다.
--file-size
옵션은 크기가 측정될 파일의 파일 경로를 기대합니다.
내부적으로, bencher run
은Bencher Metric Format (BMF) JSON으로
결과를 출력합니다.
따라서 the json
adapter를 명시적으로 사용하는 것이 좋은 관행입니다.
더 자세한 내용은 파일 크기 추적 방법을 참조하세요.
file-size
측정(즉, bytes (B)
)이 수집됩니다.
파일 크기 값(즉, value
)만 사용할 수 있습니다.
lower_value
또는 upper_value
은 수집되지 않습니다.
file-size
측정은 모든 프로젝트에 대해 기본적으로 생성되지 않습니다.
하지만, --file-size
옵션을 사용할 때, 이 측정은 프로젝트에 대해 자동으로 생성됩니다.
--file-size
옵션은 여러 파일 크기를 추적하려면 여러 번 사용할 수 있습니다.
#️⃣ C# DotNet
C# DotNet 어댑터(c_sharp_dot_net
)는 BenchmarkDotNet 출력을 JSON 포맷(즉 --exporters json
)으로 기대합니다.
latency
측정값(즉 나노초(ns)
)이 수집됩니다.
이 JSON 출력은 파일로 저장되므로 파일 경로를 지정하기 위해 bencher run
CLI의 --file
인자를 사용해야 합니다.
메트릭에는 두 가지 옵션이 있습니다:
mean
(기본값):lower_value
와upper_value
는 평균(즉value
)보다 표준편차 하나 아래와 위에 각각 있습니다.median
:lower_value
와upper_value
는 중앙값(즉value
)보다 사분위수 범위 하나 아래와 위에 각각 있습니다.
이는 bencher run
CLI 하위 명령어에서 --average
옵션으로 지정할 수 있습니다.
➕ C++ Catch2
C++ Catch2 어댑터(cpp_catch2
)는 Catch2 출력을 예상합니다.
지연시간
측정(즉 나노초(ns)
)이 수집됩니다.
lower_value
와 upper_value
는 각각 평균(즉 value
)보다 한 표준 편차 아래와 위입니다.
➕ C++ 구글
C++ 구글 어댑터(cpp_google
)는 Google Benchmark 출력을 JSON 형식(--benchmark_format=json
을 통해)으로 기대합니다.
지연 시간
측정(즉, 나노초(ns)
)이 수집됩니다.
평균(즉, 값
)만 사용 가능합니다. lower_value
와 upper_value
는 없습니다.
🕳 Go Bench
Go Bench 어댑터(go_bench
)는 go test -bench 출력을 기대합니다.
지연시간(latency)
측정값(예: 나노초(ns)
)이 수집됩니다.
평균(mean)
값(예: value
)만 사용 가능합니다. 하한값(lower_value)
과 상한값(upper_value)
은 없습니다.
☕️ 자바 JMH
자바 JMH 어댑터(java_jmh
)는 Java 마이크로벤치마크 하니스(JMH) 출력을 JSON 형식(즉, -rf json
)으로 기대합니다.
이 JSON 출력은 파일로 저장되므로 파일 경로를 지정하기 위해 bencher run
CLI의 --file
인자를 사용해야 합니다.
latency
및 throughput
측정치(즉, 나노초(ns)
및 초당 작업 수(ops/sec)
)를 수집할 수 있습니다. lower_value
및 upper_value
는 각각 평균(즉, value
)에 대한 하한 및 상한 신뢰 구간입니다.
🕸 JavaScript 벤치마크
JavaScript 벤치마크 어댑터(js_benchmark
)는 Benchmark.js 출력을 기대합니다.
throughput
측정치(즉, 초당 연산(ops/sec)
)가 수집됩니다.
lower_value
와 upper_value
는 각각 중앙값(즉, value
) 아래와 위의 상대적 오차 범위입니다.
🕸 자바스크립트 시간
자바스크립트 시간 어댑터(js_time
)는 console.time/console.timeEnd 출력을 기대합니다.
지연 시간
측정(예: 나노초(ns)
)이 수집됩니다.
값
(예: value
)만 사용할 수 있습니다. lower_value
와 upper_value
는 없습니다.
🐍 Python ASV
Python ASV 어댑터(python_asv
)는 airspeed velocity CLI asv run 출력을 기대합니다.
latency
측정치(즉, 나노초(ns)
)가 수집됩니다.
lower_value
와 upper_value
는 각각 중앙값(즉, value
) 아래와 위의 사분위범위입니다.
🐍 파이썬 Pytest
파이썬 Pytest 어댑터 (python_pytest
)는 pytest-benchmark 출력을 JSON 형식 (--benchmark-json results.json
옵션을 사용하여)으로 기대합니다.
이 JSON 출력은 파일로 저장되므로 파일 경로를 지정하기 위해 bencher run
CLI의 --file
인자를 사용해야 합니다.
latency
측정값은 (예: 나노초 (ns)
) 수집됩니다.
메트릭에는 두 가지 옵션이 있습니다:
mean
(기본값):lower_value
와upper_value
는 각각 평균(예:value
) 아래와 위에 한 표준편차입니다.median
:lower_value
와upper_value
는 각각 중앙값(예:value
) 아래와 위에 하나의 사분위 범위입니다.
이는 bencher run
CLI 서브커맨드에서 선택적 --average
인자를 사용하여 지정할 수 있습니다.
♦️ 루비 벤치마크
루비 벤치마크 어댑터(ruby_benchmark
)는 #bm
, #bmbm
, #benchmark
메소드에 대한 Benchmark 모듈 출력을 예상합니다.
각 벤치마크에는 레이블이 필요합니다.
latency
측정값(즉 나노초(ns)
)이 수집됩니다.
보고된 값(즉 value
)만 사용할 수 있습니다. lower_value
와 upper_value
는 없습니다.
🦀 러스트 벤치
러스트 벤치 어댑터(rust_bench
)는 libtest 벤치 출력을 기대합니다.
지연 시간
측정값(즉, 나노초(ns)
)이 수집됩니다.
lower_value
와 upper_value
는 각각 중앙값(즉, value
) 아래와 위의 편차입니다.
🦀 러스트 Criterion
러스트 Criterion 어댑터(rust_criterion
)는 Criterion의 출력을 기대합니다.
latency
측정값(즉, 나노초(ns)
)이 수집됩니다.
lower_value
와 upper_value
는 각각 기울기(가능한 경우) 또는 평균(그렇지 않은 경우)의 하한선과 상한선(즉, 값
)입니다.
🦀 러스트 Iai
러스트 Iai 어댑터(rust_iai
)는 Iai 출력을 기대합니다.
instructions
, l1-accesses
, l2-accesses
, ram-accesses
, estimated-cycles
측정치가 수집됩니다.
이러한 측정치(즉 value
)만 사용할 수 있습니다. lower_value
와 upper_value
측정치는 없습니다.
이 어댑터에 대한 측정치는 모든 프로젝트에 대해 기본적으로 생성되지 않습니다.
그러나 이 어댑터를 사용할 때, 이러한 측정치는 자동으로 귀하의 프로젝트에 생성될 것입니다.
🦀 Rust Iai-Callgrind
Rust Iai 어댑터(rust_iai_callgrind
)는 Iai-Callgrind 출력을 기대합니다.
instructions
, l1-hits
, l2-hits
, ram-hits
, total-read-write
, 그리고 estimated-cycles
측정값이 수집됩니다.
이러한 측정값들(즉 value
)만이 사용 가능합니다. lower_value
와 upper_value
측정값은 없습니다.
이 어댑터에 대한 측정값들은 모든 프로젝트에 대해 기본적으로 생성되지 않습니다.
그러나 이 어댑터를 사용할 때, 이러한 측정값들은 자동으로 귀하의 프로젝트에 생성될 것입니다.
❯_️ 셸 하이퍼파인
셸 하이퍼파인 어댑터(shell_hyperfine
)는 Hyperfine 출력을 JSON 포맷(--export-json results.json
예시)으로 기대합니다.
이 JSON 출력은 파일에 저장되므로, 파일 경로를 지정하기 위해 bencher run
CLI --file
인수를 사용해야 합니다.
latency
(예: 나노초(ns)
) 측정값이 수집됩니다.
지표에는 두 가지 옵션이 있습니다:
mean
(기본값):lower_value
와upper_value
는 각각 평균(예:value
)보다 한 표준편차 아래와 위입니다.median
:lower_value
와upper_value
는 각각min
및max
값입니다.
이는 bencher run
CLI 서브커맨드에서 --average
옵션으로 지정할 수 있습니다.
🐰 축하합니다! 벤치마크 하네스 어댑터에 대해 모두 배웠습니다! 🎉