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