LWN:pahole 进展!

关注了就能看到更多这么棒的文章哦~

Updates to pahole

By Daroc Alden
June 20, 2024
LSFMM+BPF
Gemini-1.5-flash translation
https://lwn.net/Articles/978727/

Arnaldo Carvalho de Melo 在 2024 年的 Linux 存储、文件系统、内存管理和 BPF 峰会 (Linux Storage, Filesystem, Memory Management, and BPF Summit) 上介绍了他对 Poke-a-hole (pahole) 的工作。pahole 是一个程序,这些年来得到了很大的扩展,它与 BPF 轨道 (BPF track) 相关,因为它能够从 DWARF 调试信息中生成 BPF 类型格式 (BTF) 信息。他介绍了一些对该程序的小改动,然后详细介绍了支持该数据类型分析的新功能。他的 幻灯片 包含了一些示例。

BTF 也随着 BPF 在不断演进。随着时间的推移,Carvalho 一直在为 pahole 添加选项来应对这些变化,但这些选项只会让 pahole 更难使用。有时很难知道在某个特定调用中应该使用什么标志或标志组合。因此,他最近添加了一个 --btf_features 标志,它可以接受一个由逗号分隔的 feature 列表,以便把多种标志集合起来。任何未知标志都会被忽略,这可能会让用旧版本的 pahole 生成 BTF 变得不那么痛苦。在开发过程中,可以利用 --btf_features_strict 生成拼写错误的警告。这种新方法 略微简化了 内核用来生成 BTF 信息的 Makefile ,用一组静态的标志取代了条件语句:

--btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func

另一个近期的改变是引入了可重现的构建 (reproducible builds)。另一位开发人员提交了一个禁用并行 BTF 编码的补丁,因为输出可能在不同运行之间存在差异。确保 pahole 的输出可重现是非常重要的,因为 BTF 信息被编码到内核映像中——因此不可重现的 BTF 意味着得到的是不可重现的内核映像。现在 Carvalho 添加了代码来确保并行编码线程每次都按相同的顺序输出信息。新的可重现性测试证实,用户现在可以同时拥有并行编码和可重现的构建,并且性能开销很小。

BPF 一直拥有用于 kfuncs 的 "按 BTF ID 调用" 机制,但以前实际上没有办法查看给定内核中有哪些 kfuncs。现在,pahole 为 kfuncs 输出了声明信息(当启用 decl_tag_kfuncs 功能时),因此感兴趣的代码可以遍历所有声明。Carvalho 也一直在致力于改变 BTF 处理内核模块的方式。现在,内核模块中的调试信息通过 BTF ID 引用内核中的项目,这样就不需要将整个内核的调试信息与每个模块一起发送。这不会有问题,除非内核的每个构建的编号都会发生变化。通常,这需要随着内核也重新编译模块。但经过一些额外的努力,内核模块可以在生成的 BTF 中使用 ELF 重定位来进行构建,因此它们并不总是需要重新编译一次。他说,该实现几乎要完成了,准备合并。

数据类型分析

BTF 已经为像 perf 这样的性能监控工具提供了一种简单的方法来跟踪哪些代码行是对应于特定的指令。然而,这并不总是能说明全部情况。现代 CPU 具有积极的缓存机制,从内存中获取值会带来严重的性能损失;从计算交互的数据类型而不是正在运行的代码的角度来分析性能问题是有好处的。

Carvalho 演示了两个工具: perf mem ,它显示了按每个结构的各个成员细分的访问内存所花费的时间,以及 perf c2c,它会跟踪伪装共享(flase sharing)和缓存逐出(cache eviction)。为了使这些工具能够正常工作,需要有某种方式将内存访问不仅跟代码行关联起来,而且要跟所涉及的值的特定类型关联起来。perf mem 的原始版本 使用 DWARF 调试信息来建立这种连接。现在,BTF 拥有足够的信息来用于该目的。 perf 仍然更喜欢在 DWARF 表可用时优先用它们,但它确实会使用 BTF 来显示有关 kfuncs 的信息。

Carvalho 详细介绍了 perf 如何处理程序反汇编;简而言之,它使用 Capstone 库,当 Capstone 不可用时,退回到 objdump。与 objdump 的集成也意味着它支持所有由 GNU Binutils 支持的架构。

Daniel Borkmann 询问这些更改是否已经可用,Carvalho de Melo 说已经可用。他正在继续改进,但基本功能现在可以使用。José Marchesi 询问如果内核更改为直接生成 BTF,而不是使用 DWARF 信息进行编译,然后使用 pahole 进行转换,是否会导致问题。Carvalho 解释说,pahole 拥有一个 BTF 加载器,因此它不需要改变工具的使用方式。此时会议时间结束了。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

5c9df31ec6b9ca6b344c4f11f3f2f7f4.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值