eBPF Talk: 内核 bpf 子系统贡献++
文章目录
最近在忙着些什么呢?没有发表 eBPF 技术文章了。
本公众号并没有被封号、也没有被禁言;其实,最近在忙着向内核 bpf 子系统贡献 patch,在不断完善 tailcall 这个基础特性。
Fix tailcall infinite loop
详情请看:eBPF Talk: 内核 bpf 子系统贡献之修复 tailcall 无限循环。
由该 patch 触发了一个隐藏的 BUG:当 CONFIG_BPF_JIT 被禁用时,check_attach_btf_id()
里会出现 error pointer dereferencing。
Fix tr dereferencing
在提交了 Fix tailcall infinite loop 的 patch 后,在 CONFIG_BPF_JIT 被禁用的时候,会触发一个 BUG:
当 CONFIG_BPF_JIT 被禁用时,bpf_trampoline_get()
会返回 ERR_PTR(-EOPNOTSUPP)
而不是 NULL
,从而导致跳过了 if (!tr)
的异常处理。
最终的解决办法如下:
而在上周六的时候,发现该改动往回 patch 了 4 个 LTS 版本:
可喜可贺,这是个有意义的小 patch。
Fix tailcall hierarchy (WIP)
这是刚完成 POC 的 patch,已向 kernel-bpf 社区发起 RFC PATCH。
等该 patch merge 到 kernel-bpf 后,再详细讲解吧。
Introduce tailcall tracer (TBD)
这是个新特性,能够对 tailcall 进行 trace。
目前正在搞 POC,改动的代码量挺大的:
期望能顺利完成 POC 吧。
未来,在提交 patch 的时候,估计要弄 10+ 个 patch 了;而且要花更长的时间才能 merge 到 kernel-bpf。
小结
相比研究 bpf 的特性实现,直接实现自己想要的特性来的更有趣。
文章作者 Leon Hwang
上次更新 2024-05-15