Perf 性能分析工具的栈展开难题
2025-01-31
Perf 是一款强大的性能分析工具,它通过 PMU 计数器溢出中断来捕获线程状态,进行性能分析。但栈展开却是一个棘手的问题。现代编译器默认不生成帧指针,导致栈回溯变得困难。虽然可以使用 -fno-omit-frame-pointer 重新编译,但代价高昂且可能导致系统库不兼容。DWARF 提供了另一种方案,但其复杂性和性能开销巨大,Linus Torvalds 都明确反对将其用于内核栈展开。因此,Perf 采取折中方案:只复制栈顶部分到用户空间进行展开,虽然限制了栈大小 (65,528 字节),但能有效平衡性能和实用性。
开发
栈展开