帧指针的返回

主要观点:调试器和分析器有时明显有问题,有时微妙难以发现。默认的 libc 不生成帧指针会导致 CPU 火焰图部分错误等问题,Fedora 和 Ubuntu 即将发布默认包含帧指针的版本,这对火焰图和持续分析器等都有很大帮助。还介绍了帧指针的相关知识、其被移除的历史、多年来导致的问题及解决过程等。
关键信息:

  • 系统默认 libc 不生成帧指针会使部分堆栈信息缺失,影响火焰图等。
  • Fedora 和 Ubuntu 即将发布默认含帧指针的版本,Arch Linux 也在跟进。
  • 帧指针对性能有一定影响,不同语言和应用情况不同,通常小于 1%,但极端情况可能达 10%。
  • 多年来帧指针相关问题一直存在,各方在推动其默认开启。
    重要细节:
  • x86 - 64 ABI 规定 %rbp 可作“基指针”,但此寄存器使用可选。
  • 2004 年 gcc 开始停止生成帧指针,2005 - 2023 年该变化应用到 x86 - 64 导致更多问题。
  • 2014 年作者在 Netflix 发现 Java 缺少帧指针支持,后开发修复并推广使用带帧指针的 libc。
  • 进行过多种性能开销测试,如 Python 等基准测试的情况。
  • 上游化帧指针存在困难,Fedora 相关讨论很复杂。
  • 除帧指针外还有多种栈遍历方式,如 LBR、BTS 等。
  • 未来可能会有更多关于栈遍历的发展,如 SFrames、Shadow Stacks 等。
阅读 12
0 条评论