Skip to content

Instantly share code, notes, and snippets.

@phemmer
Last active August 29, 2015 14:19
Show Gist options
  • Select an option

  • Save phemmer/e0cf1bc04b1d5ff68ab9 to your computer and use it in GitHub Desktop.

Select an option

Save phemmer/e0cf1bc04b1d5ff68ab9 to your computer and use it in GitHub Desktop.
golang callers benchmark
package main
import (
"runtime"
"testing"
)
var callers [100]uintptr
var callersCopy []uintptr
func getStack(depth int, stack []uintptr) int {
if depth > 0 {
return getStack(depth-1, stack)
} else {
return runtime.Callers(0, stack)
}
}
func BenchmarkCallersCopy_1(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, getStack(1, callers[:]))
copy(callersCopy, callers[:])
}
}
func BenchmarkCallers_1(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, 100)
getStack(1, callers[:])
}
}
func BenchmarkCallersCopy_30(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, getStack(30, callers[:]))
copy(callersCopy, callers[:])
}
}
func BenchmarkCallers_30(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, 100)
getStack(30, callers[:])
}
}
func BenchmarkCallersCopy_60(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, getStack(60, callers[:]))
copy(callersCopy, callers[:])
}
}
func BenchmarkCallers_60(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, 100)
getStack(60, callers[:])
}
}
func BenchmarkCallersCopy_90(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, getStack(90, callers[:]))
copy(callersCopy, callers[:])
}
}
func BenchmarkCallers_90(b *testing.B) {
for i := 0; i < b.N; i++ {
callersCopy = make([]uintptr, 100)
getStack(90, callers[:])
}
}
# go test -v -bench=.
testing: warning: no tests to run
PASS
BenchmarkCallersCopy_1 1000000 1858 ns/op
BenchmarkCallers_1 300000 4323 ns/op
BenchmarkCallersCopy_30 200000 7383 ns/op
BenchmarkCallers_30 200000 8806 ns/op
BenchmarkCallersCopy_60 100000 12609 ns/op
BenchmarkCallers_60 100000 13047 ns/op
BenchmarkCallersCopy_90 100000 17650 ns/op
BenchmarkCallers_90 100000 17506 ns/op
ok tmp/5pr 13.943s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment