benchmark-checklist
Agent skill frommichael-denyer/pstack-claude
Vet a perf measurement (limiter, tuning, limits, errors, repeatability, relevance, and whether the work happened) before you report or act on it. Use when you run a benchmark or report a speedup or regression you measured.
How to install benchmark-checklist
install benchmark-checklist
# install the pstack-claude pack with the skills CLI
npx skills add michael-denyer/pstack-claude# or add only this skill to Claude Code: copy the folder
plugins/pstack/skills/benchmark-checklist/
# into
~/.claude/skills/benchmark-checklist/ (all projects)
.claude/skills/benchmark-checklist/ (one project)
1# Benchmark checklist23Use this when you produce a performance number: a PR's before and after, a regression claim, a hillclimb harness, or a library or config choice. Answer each question with evidence from a run, not a guess about the code.45For a quick ballpark the user asked for, one run is enough. Still check questions 4 and 7, and say that it is one run. Skip the rest unless that run looks wrong. A choice between options is never a ballpark.67## Before you run anything89- Write down the claim you expect to make, in the words you would ship ("export is 30% faster at p50 on the 60k-row dataset"). The questions test that sentence.10- Read the measurement script. Note what it times, counts, and ignores.11- Check the load average with `uptime` and the core count with `nproc`. If the machine is busy, find out what is running. If you cannot stop it, interleave the sides so both see the same noise, and say so in the report.1213## The questions14151. **Why not double?** Name the limiter. Profile in a run you do not report, because profilers and tracers slow the work down. Use CPU per process (`top`, `pidstat`), a runtime profiler (`node --cpu-prof`, `py-spy`, `perf`), I/O wait, and syscall counts (`strace -c` on Linux), then map the hot spot to source. Watch the load generator too: if it saturates first, you measured the load generator. If a change did not move the number, the limiter explains why, so find it before you call the change useless.16…
Excerpt shown under the repository's MIT license.
