1
0
mirror of https://github.com/DataDog/go-profiler-notes.git synced 2025-07-12 23:50:13 +02:00
Files
go-profiler-notes/examples/stack-unwind-overhead
Felix Geisendörfer ed2fa54799 fix unwind tests
2021-04-12 11:29:22 +02:00
..
2021-04-12 11:29:22 +02:00
2021-04-05 16:10:08 +02:00
2021-04-12 11:29:22 +02:00
2021-04-12 11:29:22 +02:00
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