go-profiler-notes/examples/stack-unwind-overhead
Felix Geisendörfer ed2fa54799 fix unwind tests
2021-04-12 11:29:22 +02:00
..
generated.go fix unwind tests 2021-04-12 11:29:22 +02:00
go.mod stack-unwind-overhead 2021-04-05 16:10:08 +02:00
main.go fix unwind tests 2021-04-12 11:29:22 +02:00
main_test.go fix unwind tests 2021-04-12 11:29:22 +02:00
README.md fix unwind tests 2021-04-12 11:29:22 +02:00

stack-unwind-overhead

This directory contains benchmarks to explore which factors impact stack unwinding in Go. It's informed by an analysis of the gopclntab unwinding implementation.

Result 1: O(N) Stack Depth

The benchmark below shows that stack unwinding has O(N) complexity with regard to the number of call frames on the stack:

BenchmarkStackDepth/8-12  	1968214	      612.2 ns/op
BenchmarkStackDepth/16-12 	 975457	     1184 ns/op
BenchmarkStackDepth/32-12 	 572706	     2101 ns/op
BenchmarkStackDepth/64-12 	 333598	     3596 ns/op
BenchmarkStackDepth/128-12         	 182450	     6561 ns/op
BenchmarkStackDepth/256-12         	  94783	    12548 ns/op
BenchmarkStackDepth/512-12         	  48439	    24471 ns/op
BenchmarkStackDepth/1024-12        	  24884	    48310 ns/op

Tests were done on my local machine:

go test -bench .
goos: darwin
goarch: amd64
pkg: github.com/felixge/go-profiler-notes/examples/stack-unwind-overhead
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz