# Episode 89: Stack walking {%youtube Dxno5UpLbZ0 %} With [Javier Honduvilla Coto](https://twitter.com/javierhonduco) and [Liz Rice](https://twitter.com/lizrice) ## Headlines * [KubeCon videos are up](https://youtube.com/playlist?list=PLj6h78yzYM2PyrvCoOii4rAopBswfz1p7) * [CiliumCon too](https://youtube.com/playlist?list=PLj6h78yzYM2Meb36FX-bKd-3fpNvtlzpE) * [KubeCon wrap-up blog](https://isovalent.com/blog/post/kubecon-europe-2023-wrap-up) * [BPF dev stats for 6.4](https://lore.kernel.org/bpf/ZFAOojsT93ZxwNu3@google.com/t/#u) ## Stack walking with Parca * [Parca, the continuous profiling project for cloud-native applications](https://www.parca.dev/). * [In-depth blogpost on unwinding native code without frame pointers](https://www.polarsignals.com/blog/posts/2022/11/29/profiling-without-frame-pointers/). * [Polar Signals](https://www.polarsignals.com/). * [BPF code for our native unwinder](https://github.com/parca-dev/parca-agent/tree/1dc4360bd006da325653a821ef6b84c5b33da3a3/bpf). * [rbperf, a BPF profiler and tracer for Ruby](https://github.com/javierhonduco/rbperf). * [Design Decisions of a Continuous Profiler](https://www.polarsignals.com/blog/posts/2022/12/14/design-of-continuous-profilers/). * [CppCon 2017: Dave Watson “C++ Exceptions and Stack Unwinding”](https://www.youtube.com/watch?v=_Ivd3qzgT7U&t=2114s). * [DWARF Debugging Information Format Version 5](https://dwarfstd.org/doc/DWARF5.pdf). * [System V Application Binary Interface, AMD64 Architecture Processor Supplement](https://refspecs.linuxbase.org/elf/x86_64-abi-0.99.pdf). * [Fast and Reliable DWARF Unwinding, and Beyond](https://fzn.fr/projects/frdwarf/frdwarf-oopsla19.pdf). * [BPF Features by Linux Kernel Version](https://github.com/iovisor/bcc/blob/275aa3f3ea5236c6b556cbb94c583db105cb92fd/docs/kernel-versions.md). * [Fedora Decides After All To Allow Default Compiler Flag To Help Debugging/Profiling](https://www.phoronix.com/news/F38-fno-omit-frame-pointer); * [Writing ARM64 code for Apple platforms "The frame pointer register (x29) must always address a valid frame record."](https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms) * [Golang enabling frame pointers by default](https://github.com/golang/go/issues/15840). * Kernel unwinding: * [ORC](https://docs.kernel.org/x86/orc-unwinder.html) * [SFrame, WIP](https://lore.kernel.org/linux-toolchains/20230501200410.3973453-1-indu.bhagat@oracle.com/T/#t) ## Early BPF overhead metrics Walking native stacks of a host running Postgres, CPython, Ruby (MRI) applications (some with >90 frames) ```` P50: 285ns P90: 370ns Max: 428ns ```` (kernel 6.0.1`8 with Intel i7-8700K (late ‘17) ) We'll get more metrics this year.