Benchmark

Create or modify hot-path code or optimizations should be validated by a Go Benchmark

zalando 7d1d900 1.1 KB Updated

File contents

What I do

  • focus on performance and allocations

When to use me

Use this when you are creating or modifying code in the hot path.

Quick start

Benchmarks

Write benchmarks alongside any performance-sensitive change. Use benchstat with -count 20 to compare. Always report sec/op, B/op, and allocs/op. Target zero allocations in hot-path code.

func BenchmarkMyPredicate(b *testing.B) {
    p := &predicate{...}
    req := httptest.NewRequest("GET", "/", nil)
    req.Header.Set("Authorization", "Bearer "+testToken)
    b.ReportAllocs()
    b.ResetTimer()
    for b.Loop() {
        p.Match(req)
    }
}

Example run:

% go test -bench=BenchmarkMyPredicate -benchmem -run='^$' -count 20 -cpu 1,2,4,8,16 ./predicates/mypredicate > old.txt
# ..edit code..
% go test -bench=BenchmarkMyPredicate -benchmem -run='^$' -count 20 -cpu 1,2,4,8,16 ./predicates/mypredicate > new.txt
% benchstat old.txt new.txt

Show the output of benchstat to the developer.

zalando/skipper/tree/main/.agents/skills/benchmark commit 7d1d900996

Frequently asked questions

npx skillmds@latest add zalando/benchmark