벤치마크 하네스 어댑터


어댑터는 벤치마크 하네스 출력을 Bencher Metric Format (BMF) JSON으로 변환합니다. 새 보고서가 수신될 때 API 서버에서 어댑터가 실행됩니다. 자세한 내용은 벤치마킹 개요를 참조하세요. 어댑터는 --adapter 옵션으로 the bencher run CLI 서브커맨드에 대해 지정할 수 있습니다. 어댑터가 지정되지 않은 경우 기본적으로 the magic 어댑터가 사용됩니다.

🪄 마법 (기본)

Magic Adapter (magic)는 다른 모든 어댑터의 상위 집합입니다. 그런 이유로, 기본 어댑터로 bencher run에 사용됩니다. 그러나, magic 어댑터는 탐색용으로만 사용해야 합니다.

최상의 결과를 위해, 벤치마크 하네스 어댑터를 지정해야 합니다:


{…} JSON

JSON 어댑터(json)은 Bencher 메트릭 포맷 (BMF) JSON을 기대합니다. 이는 벤처와 맞춤 벤치마크 하네스를 통합하기에 완벽합니다. 자세한 내용은 맞춤 벤치마크 추적 방법BMF JSON 참조를 참조하세요.

Terminal window
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_valueupper_value는 수집되지 않습니다. build-time 측정치는 모든 프로젝트에 기본적으로 생성되지 않습니다. 그러나 --build-time 플래그를 사용하면 이 측정치는 프로젝트에 자동으로 생성됩니다.

Terminal window
bencher run --adapter json --build-time "echo 0 > binary"

⚖️ 파일 크기

bencher run CLI 서브커맨드는 --file-size 옵션을 사용하여 배포하는 파일(즉, 바이너리 크기)의 크기를 추적하는 데 사용될 수 있습니다. --file-size 옵션은 크기가 측정될 파일의 파일 경로를 기대합니다. 내부적으로, bencher runBencher Metric Format (BMF) JSON으로 결과를 출력합니다. 따라서 the json adapter를 명시적으로 사용하는 것이 좋은 관행입니다. 더 자세한 내용은 파일 크기 추적 방법을 참조하세요.

file-size 측정(즉, bytes (B))이 수집됩니다. 파일 크기 값(즉, value)만 사용할 수 있습니다. lower_value 또는 upper_value은 수집되지 않습니다. file-size 측정은 모든 프로젝트에 대해 기본적으로 생성되지 않습니다. 하지만, --file-size 옵션을 사용할 때, 이 측정은 프로젝트에 대해 자동으로 생성됩니다. --file-size 옵션은 여러 파일 크기를 추적하려면 여러 번 사용할 수 있습니다.

Terminal window
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 인자를 사용해야 합니다.

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

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

  • mean(기본값): lower_valueupper_value는 평균(즉 value)보다 표준편차 하나 아래와 위에 각각 있습니다.
  • median: lower_valueupper_value는 중앙값(즉 value)보다 사분위수 범위 하나 아래와 위에 각각 있습니다.

이는 bencher run CLI 하위 명령어에서 --average 옵션으로 지정할 수 있습니다.


➕ C++ Catch2

C++ Catch2 어댑터(cpp_catch2)는 Catch2 출력을 예상합니다. 지연시간 측정(즉 나노초(ns))이 수집됩니다. lower_valueupper_value는 각각 평균(즉 value)보다 한 표준 편차 아래와 위입니다.

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

➕ C++ 구글

C++ 구글 어댑터(cpp_google)는 Google Benchmark 출력을 JSON 형식(--benchmark_format=json을 통해)으로 기대합니다. 지연 시간 측정(즉, 나노초(ns))이 수집됩니다. 평균(즉, )만 사용 가능합니다. lower_valueupper_value는 없습니다.

Terminal window
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)은 없습니다.

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

☕️ 자바 JMH

자바 JMH 어댑터(java_jmh)는 Java 마이크로벤치마크 하니스(JMH) 출력을 JSON 형식(즉, -rf json)으로 기대합니다. 이 JSON 출력은 파일로 저장되므로 파일 경로를 지정하기 위해 bencher run CLI의 --file 인자를 사용해야 합니다. latencythroughput 측정치(즉, 나노초(ns)초당 작업 수(ops/sec))를 수집할 수 있습니다. lower_valueupper_value는 각각 평균(즉, value)에 대한 하한 및 상한 신뢰 구간입니다.

Terminal window
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_valueupper_value는 각각 중앙값(즉, value) 아래와 위의 상대적 오차 범위입니다.

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

🕸 자바스크립트 시간

자바스크립트 시간 어댑터(js_time)는 console.time/console.timeEnd 출력을 기대합니다. 지연 시간 측정(예: 나노초(ns))이 수집됩니다. (예: value)만 사용할 수 있습니다. lower_valueupper_value는 없습니다.

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

🐍 Python ASV

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

Terminal window
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)) 수집됩니다.

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

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

  • mean (기본값): lower_valueupper_value는 각각 평균(예: value) 아래와 위에 한 표준편차입니다.
  • median: lower_valueupper_value는 각각 중앙값(예: value) 아래와 위에 하나의 사분위 범위입니다.

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


♦️ 루비 벤치마크

루비 벤치마크 어댑터(ruby_benchmark)는 #bm, #bmbm, #benchmark 메소드에 대한 Benchmark 모듈 출력을 예상합니다. 각 벤치마크에는 레이블이 필요합니다. latency 측정값(즉 나노초(ns))이 수집됩니다. 보고된 값(즉 value)만 사용할 수 있습니다. lower_valueupper_value는 없습니다.

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

🦀 러스트 벤치

러스트 벤치 어댑터(rust_bench)는 libtest 벤치 출력을 기대합니다. 지연 시간 측정값(즉, 나노초(ns))이 수집됩니다. lower_valueupper_value는 각각 중앙값(즉, value) 아래와 위의 편차입니다.

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

🦀 러스트 Criterion

러스트 Criterion 어댑터(rust_criterion)는 Criterion의 출력을 기대합니다. latency 측정값(즉, 나노초(ns))이 수집됩니다. lower_valueupper_value는 각각 기울기(가능한 경우) 또는 평균(그렇지 않은 경우)의 하한선과 상한선(즉, )입니다.

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

🦀 러스트 Iai

러스트 Iai 어댑터(rust_iai)는 Iai 출력을 기대합니다. instructions, l1-accesses, l2-accesses, ram-accesses, estimated-cycles 측정치가 수집됩니다. 이러한 측정치(즉 value)만 사용할 수 있습니다. lower_valueupper_value 측정치는 없습니다. 이 어댑터에 대한 측정치는 모든 프로젝트에 대해 기본적으로 생성되지 않습니다. 그러나 이 어댑터를 사용할 때, 이러한 측정치는 자동으로 귀하의 프로젝트에 생성될 것입니다.

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

🦀 Rust Iai-Callgrind

Rust Iai 어댑터(rust_iai_callgrind)는 Iai-Callgrind 출력을 기대합니다. instructions, l1-hits, l2-hits, ram-hits, total-read-write, 그리고 estimated-cycles 측정값이 수집됩니다. 이러한 측정값들(즉 value)만이 사용 가능합니다. lower_valueupper_value 측정값은 없습니다. 이 어댑터에 대한 측정값들은 모든 프로젝트에 대해 기본적으로 생성되지 않습니다. 그러나 이 어댑터를 사용할 때, 이러한 측정값들은 자동으로 귀하의 프로젝트에 생성될 것입니다.

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

❯_️ 셸 하이퍼파인

셸 하이퍼파인 어댑터(shell_hyperfine)는 Hyperfine 출력을 JSON 포맷(--export-json results.json 예시)으로 기대합니다. 이 JSON 출력은 파일에 저장되므로, 파일 경로를 지정하기 위해 bencher run CLI --file 인수를 사용해야 합니다. latency(예: 나노초(ns)) 측정값이 수집됩니다.

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

지표에는 두 가지 옵션이 있습니다:

  • mean(기본값): lower_valueupper_value는 각각 평균(예: value)보다 한 표준편차 아래와 위입니다.
  • median: lower_valueupper_value는 각각 minmax 값입니다.

이는 bencher run CLI 서브커맨드에서 --average 옵션으로 지정할 수 있습니다.



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


계속하려면: 연속 벤치마킹 ➡

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


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