使用 bpftrace 探索语言运行时 —— Matthew Gaudet

主要观点:作者学习 eBPF 并用于解决一些问题,以 SpiderMonkey 为例,通过 bpftrace 工具找出频繁创建 Rooted 的源位置,还制作了相关报告并打开了一系列 bug 报告,之后开始写分配分析器。
关键信息:

  • eBPF 是 Linux(及 Windows)内置的检测和跟踪系统,可提供字节码让内核验证和执行,能收集信息并导出,bpftrace提供类似awk的语言编写 BPF 程序。
  • SpiderMonkey 有Rooted类型,偶尔在性能分析中出现,还有RootedTuple工具,作者好奇其来源,开始用 bpftrace 探索。
  • 初步的 bpftrace 程序结构及相关变量、函数说明。
  • 通过uprobe访问函数符号进行探测,起初无法获取文件名和行号,后来发现ustack(n)函数,最终通过改进的探针文件获取到结果并生成报告和打开 bug 报告。
    重要细节:
  • 示例 bpftrace 程序中变量@开头为全局映射,$开头为局部变量,/something/为过滤器,有内置函数如printdeletensectid等。
  • 作者最初针对Rooted::Rooted函数进行探测,后改为registerWithRootLists函数,标记为MOZ_NEVER_INLINE,最初未符号化结果,在 Zixian Cai 帮助下解决问题。
  • 运行探针文件的命令sudo bpftrace rootTrace.bt programUnderTrace -c ‘programUnderTrace …’,为保持程序 alive 在JS_ShutDown后让进程睡眠 2 秒,对每个 JetStream3 子测试运行分析器并生成报告,打开相关 bug 报告如 https://bugzilla.mozilla.org/... 等。
阅读 9
0 条评论