A tachometer for code.
Caution
tak is pre-v1. Its CLI, configuration, storage format, and behavior are not finalized.
Breaking changes may land between releases, including changes that require existing configuration or recorded data to be updated. If you need a stable benchmark tool, use hyperfine. If you need CI benchmark tracking, use Bencher or CodSpeed.
Wall-clock time on a shared CI runner has roughly the same noise floor as the regressions people want to catch. tak asks whether retired instruction counts can provide a deterministic signal instead.
Measured on a 32-core Linux host:
| metric | quiet host | under 32-way CPU contention | median drift |
|---|---|---|---|
| instructions (cachegrind) | 0.008–0.027% CV | 0.011–0.021% CV | ≤0.035% |
| wall clock | 3.9–20.6% CV | 14.2–19.2% CV | +147% to +164% |
That produces one narrow rule: gate on instruction counts; report wall time without gating on it. Syscall counts and peak RSS move with thread scheduling and are not deterministic enough for a tight threshold.
Measurements stay in the repository as JSON lines under refs/notes/tak, merged with git's
cat_sort_uniq strategy. There is no database, account, or hosted service.
Read the methodology for the measurements, limitations, and reasoning.
tak runmeasures wall time and, where Valgrind is available, instruction countstak.tomldeclares repeatable benchmarks for local and CI runstak run --record,tak push, andtak historystore results in git notestak comparereports changes and gates only on instruction countstak backfillmeasures published release binaries to bootstrap history
PR reporting and change-point detection do not exist.
The crate is tak-cli; the binary is tak. Releases are automated as described in
RELEASING.md.
Use mise so local and CI commands stay aligned:
mise run build
mise run test
mise run lint
mise run ciInstruction-count tests require Valgrind. Run tak doctor to see what is available on the
current host.
MIT