Last active
August 29, 2015 14:19
-
-
Save phemmer/e0cf1bc04b1d5ff68ab9 to your computer and use it in GitHub Desktop.
golang callers benchmark
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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[:]) | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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