The Go Execution Tracer (aka runtime/trace) was designed to achieve low enough overhead to be usable on "a server in production serving live traffic". This is achieved by writing events into per-P buffers, using RDTSC for timestamps, and encoding into a relatively efficient binary format. However, one achilles heel has remained since 2014: ... 75% of the overhead is stack unwinding. – Go Execution
