最近在忙着些什么呢?没有发表 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 的特性实现,直接实现自己想要的特性来的更有趣。