文章摘要
文章讨论了将BPF支持引入GNU工具链的进展,重点介绍了整合BPF类型格式(BTF)和紧凑C类型格式(CTF)的工作,以及开发者与内核社区代表讨论的下一步计划。
文章总结
GNU工具链中BPF支持的下一步发展
自扩展BPF问世以来,内核中的BPF支持一直依赖于LLVM工具链。然而,将BPF支持引入GNU工具链的努力也在不断推进。在2025年GNU Tools Cauldron会议上,相关开发人员与内核社区代表共同探讨了当前工作进展及后续计划。
BTF与CTF的整合
BPF类型格式(BTF)用于描述内核数据结构与函数的类型信息,其衍生自更通用的紧凑C类型格式(CTF)。Nick Alcock展示了将这两种格式重新统一的成果:libctf库现已支持生成和解析BTF,并能处理正在开发的CTFv4格式。未来内核构建可直接生成BTF,无需再依赖pahole工具。
但要使BTF完全替代CTF,仍需改进:需添加字符串头字段以区分编译单元,制定归档中结构成员的引用格式以支持压缩,并增加浮点数据支持以便用户空间使用。Alexei Starovoitov认为BTF作为内核专用格式无需支持用户空间,但José Marchesi强调广泛采用能提升工具链质量。对于C++程序的支持,Alcock表示通过新增类型编码即可实现。
GCC移植进展
Marchesi介绍了GCC BPF后端的现状,目标是将GCC发展为BPF代码的主要编译器。当前最高优先级是添加btf_decl_tag和btf_type_tag属性支持,这些注解能帮助BPF验证器检查内存访问安全性。David Faust次日即提交了相关补丁。
其他进展包括:GCC已建立完善的BPF编译测试套件,需修复若干编译器错误,可能需支持may_goto指令,并持续优化以避免验证器拒绝。Marchesi呼吁社区协助加速开发,Starovoitov指出LLVM的快速响应是开发者偏好它的原因,但Marchesi强调GCC的严格流程能保证质量。
验证挑战
GCC生成的代码常因优化导致验证失败。Eduard Zingerman举例说明优化可能破坏变量范围跟踪,例如将指针计算移出条件分支会阻碍验证。LLVM通过特殊内联函数抑制此类优化,而GCC计划引入-fverifiable编译选项,针对性调整优化过程。
讨论中,Nick Clifton质疑编译器过度适配验证器可能削弱其改进动力,建议优先完善验证器。Marchesi则认为安全加载BPF程序的责任需各方共担。
(本文基于LWN.net文章编译,保留技术细节并删减了订阅推广内容。)
评论总结
总结评论内容:
- 关于LLVM许可证和内核指针管理的讨论(评论1)
- 主要观点:LLVM采用不同许可证,检查其代码并不违法。内核中指针和偏移地址的完整性管理已有大量实例可参考。
- 关键引用: "Llvm is a different licence not illegal to examine"(LLVM采用不同许可证,检查不违法) "has a proof by examples a-plenty in the other code"(其他代码中有大量实例证明)
- 关于BPF技术文章可读性的建议(评论2)
- 主要观点:建议技术文章对BPF等专业术语提供简要说明,方便普通读者理解。
- 关键引用: "I wish these articles would have a one sentence description of what BPF stands for"(希望文章能对BPF的含义提供一句话说明) "It would help passers-by"(这将有助于普通读者)
注:两则评论均未显示评分(None),但提出了具体的技术讨论和文章改进建议。