golang-benchmark

Measure, profile, and statistically compare Go benchmark performance with pprof and benchstat.

1|Updated Jun 2, 2026
One-click install
npx skills add https://github.com/VerifiedOrganic/onboard --skill golang-benchmark-verifiedorganic
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: golang-benchmark
Source: https://github.com/VerifiedOrganic/onboard/tree/main/.agents/skills/golang-benchmark
Command: npx skills add https://github.com/VerifiedOrganic/onboard --skill golang-benchmark-verifiedorganic

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires benchstat, and includes references (resource) components.

What problem does it solve? Go performance work fails when developers draw conclusions from single benchmark runs, misread pprof profiles, or cannot tell a real regression from CI noise. This Skill provides the full measurement methodology — writing correct benchmarks, profiling hot paths, and proving improvements with statistical rigor. ## Core Features & Use Cases - Benchmark Authoring: Write benchmarks with b.Loop() (Go 1.24+), memory tracking via b.ReportAllocs(), custom metrics via b.ReportMetric(), and table-driven sub-benchmarks. - Profiling & Analysis: Capture CPU, memory, and execution trace profiles from benchmarks, then interpret them with pprof commands, escape analysis, inlining diagnostics, and SSA/assembly inspection. - Statistical Comparison & CI Gating: Compare runs with benchstat (p-values, confidence intervals, filters), and set up CI regression detection with benchdiff, cob, or gobenchdata including noisy-runner mitigation. - Use Case: After optimizing a JSON parser, run both versions with -count=10, compare with benchstat, and paste the statistically significant result into the commit body to document the improvement. ## Quick Start Ask the agent to write a benchmark for your function, run it with -count=10 and -benchmem, then compare the before and after results with benchstat.

Frequently Asked Questions about golang-benchmark

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I write a Go benchmark with b.Loop()?▼

Place setup code before the loop, then use `for b.Loop() { YourFunc(input) }` inside a `func BenchmarkX(b *testing.B)`. b.Loop() times only the loop body and prevents dead code elimination, so no b.ResetTimer() or sink variable is needed.

How do I compare Go benchmark results with benchstat?▼

Run each version with `go test -run='^$' -bench=. -benchmem -count=10` and save output to files, then run `benchstat old.txt new.txt`. Trust only results with p<0.05; a `~` symbol means no statistically significant difference.

What is the difference between alloc_objects and inuse_space in pprof?▼

alloc_objects counts all allocation events since program start, making it right for diagnosing GC churn. inuse_space shows only currently live heap objects, making it the correct choice for memory leak detection via snapshot comparison.

Why are my CI benchmark results noisy on GitHub runners?▼

Shared CI runners show 5-10% variance from noisy neighbors, thermal throttling, and hardware differences. Mitigate by comparing base and head in the same job, using -count=10 with benchstat, and setting conservative 20%+ thresholds.

When should I use go tool trace instead of pprof?▼

Use the execution tracer when latency is high but CPU profiles show low utilization — pprof only shows on-CPU time while trace reveals goroutine scheduling delays, blocking on I/O or channels, and GC phases.

Is it safe to run cob for benchmark regression checks locally?▼

No. cob uses `git reset` internally, which can destroy uncommitted changes, and it compares single runs without statistical analysis. Commit all work first and run cob only in CI pipelines.