Benchmarking
Intro
Benchmarks are provided by Go testing library and are written in a similar way to how you write Go tests:
Benchmarks are placed in _test.go
files.
They start with Benchmark
instead of Test
.
The benchmarked code is placed inside this loop:
for i := 0; i < b.N; i++ {
// your code to benchmark
}
Example
Bellow I try to benchmark to functions Hello()
and Hi
:
package andrei
import (
"testing"
"time"
)
func Hello() {
time.Sleep(1 * time.Second)
}
func Hi() {
time.Sleep(500 * time.Millisecond)
}
func BenchmarkHello(b *testing.B) {
for i := 0; i < b.N; i++ {
Hello()
}
}
func BenchmarkHi(b *testing.B) {
for i := 0; i < b.N; i++ {
Hi()
}
}
Running the benchmarks
Running benchmarks in current directory:
go test -run none -bench .
Running benchmarks with checking memory allocations:
go test -run none -bench . -benchmem
Interpreting results
My output on above benchmark:
goos: linux
goarch: amd64
pkg: andrei/andrei
cpu: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
BenchmarkHello-8 1 1000071854 ns/op 88 B/op 2 allocs/op
BenchmarkHi-8 2 500798674 ns/op 44 B/op 1 allocs/op
PASS
ok andrei/andrei 2.507s
An image describing how to read benchmark results, courtesy of Practical Go Lessons: