Files
interpres/docs/BENCHMARKING.md
T
petrbalvin 17574a0d15
Test / test (push) Canceled after 1m19s
docs: add the benchmarking document
Assisted-by: GLM 5.3 Flash
2026-09-18 00:20:42 +02:00

1.7 KiB

Benchmarking

How the performance numbers attached to this project are measured, so that a number in a changelog entry or a release note can be reproduced and trusted.

The suite

The benchmarks live in bench_test.go, next to the code they measure:

Benchmark What it measures
BenchmarkParse Parse over a representative configuration document
BenchmarkMarshal Marshal of the tree Parse produced from the same document
BenchmarkStrictDecode Decode into a struct under DisallowUnknownFields
BenchmarkParseLong Parse over a generated document with about 2000 array-of-tables entries

Running

just bench

The recipe runs the suite with -benchmem -count=5. Every benchmark uses b.Loop, so setup runs outside the timed region, and ReportAllocs records allocations per operation. The parse and marshal benchmarks set SetBytes, so their results read as input bytes per second.

Method

  • An idle machine only: a loaded box times whatever else is running, and the fastest sample can land on the wrong function.
  • An A/B comparison runs both variants inside one process, in one binary; separate processes of identical binaries differ by more than the effect being measured.
  • The five counts are compared through their medians, allocations and bytes per operation alongside the times. Differences within 1 to 2 percent are noise; only a difference beyond that is a result.
  • When timing is hopeless, the allocation and byte counts are the result.

Reports

The repository stores no benchmark reports. A performance claim in CHANGELOG.md is measured with the method above on the change that makes it, and the number travels with the claim.