eBPF Talk: tailcall 问题知多少 2024-12-01 eBPF eBPF Talk 约 1004 字 预计阅读 3 分钟 tailcall 是 v4.2 内核便已引入的一个特性,它允许一个 BPF 程序调用另一个程序,而无需返回原程序。 bpf: allow bpf programs to tail-call other bpf programs 然而,在 BPF 子系统不断地引入新特性的同时,t 阅读更多
eBPF Talk: 使用 fentry 调试 tailcall BUG 2024-11-24 eBPF eBPF Talk 约 3949 字 预计阅读 8 分钟 最近,在上线 XDP 网关新版本的时候,触发了 v5.15 内核的一个 tailcall BUG,导致了一个很奇怪的问题:在一个 XDP 程序的 subprog 里,调用了 bpf_tail_call() 阅读更多
eBPF Talk: 谁动了我的 bpf map? 2024-11-17 eBPF eBPF Talk 约 1135 字 预计阅读 3 分钟 使用 bpf 跟踪 bpf map 的更新、删除函数,以此确认是谁动了 bpf map。 TL;DR 已实现对 bpf map 的更新、删除函数的跟踪,未实现批量操作 bpf map 函数的跟踪;源代码:git 阅读更多
eBPF Talk: 修复了 bpftool 中存在了 7 年的 BUG 2024-11-03 eBPF eBPF Talk 约 1625 字 预计阅读 4 分钟 在 eBPF Talk: 自制查看 bpf prog 反汇编的工具 里提到的 bpftool BUG Wrong callq address displayed,花了两三天时间将它给修了。 TL;DR [PATCH bpf v3] bpf, bpftool: Fix incorrect disasm pc 已合入 bpf 仓库。 BUG 复现 使用 bpftool 阅读更多
eBPF Talk: 自制查看 bpf prog 反汇编的工具 2024-10-27 eBPF eBPF Talk 约 1613 字 预计阅读 4 分钟 目前,我知道的查看 bpf prog 反汇编的办法有: 使用 bpftool prog dump jited; 使用 gdb -q -c /proc/kcore -ex 'disas/r 0xffffffffc00a6188,+0x143' -ex 'quit'; 使用 drgn contrib/bpf_inspec.p 阅读更多
eBPF Talk: 我禁用了 freplace tailcall freplace 2024-10-20 eBPF eBPF Talk 约 1130 字 预计阅读 3 分钟 在修复一个由 freplace 引起的 tailcall 无限循环的问题时,接纳社区的建议:禁止将 freplace prog 更新到 prog_array map 中。 使用场景 在项目中,freplace prog 当作 tail-callee 的用法如下: 在 dispatcher prog 阅读更多
eBPF Talk: guard spinlock 2024-10-13 eBPF eBPF Talk 约 885 字 预计阅读 2 分钟 守护 spinlock。 eBPF Talk: spinlock 详解 当使用 spinlock 进行统计时 eBPF Talk: 正确地进行统计,必须要使用 bpf_spin_lock() 和 bpf_spin_unlock() 来保护 spinlock 变量: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 struct xdp_stat_item { 阅读更多
eBPF Talk: 改进 XDP 解析 TCP options 2024-09-08 eBPF eBPF Talk 约 1439 字 预计阅读 3 分钟 在 eBPF Talk: XDP 解析所有 TCP options 里,已经做到了使用 XDP 解析所有 TCP options 的功能。 不过,其中使用了 percpu map 在 XDP 和 freplace 之间传递 offset;那么,是否有办法将该 percpu map 优化掉 阅读更多
eBPF Talk: 又修了一个 tailcall 有关的 BUG 2024-09-01 eBPF eBPF Talk 约 666 字 预计阅读 2 分钟 在 eBPF Talk: 耗时 10 个月,修复了又一个 tailcall 的 bug 之后,再下一城,再次修复与 tailcall 有关的一个 BUG: bpf: Fix updating attached freplace prog to prog_array map BUG 危害 这个 BUG 会导致内核 panic: 1 2 3 阅读更多
eBPF Talk: ringbuf 经验分享 2024-08-25 eBPF eBPF Talk 约 1114 字 预计阅读 3 分钟 最近在使用 ringbuf 的 bpf_ringbuf_reserve() 时踩了一个坑,记录一下。 ringbuf 简介 ringbuf 是 BPF 中能够取代 PERF_EVENT_ARRAY 的特殊 map 类型,提供了类似的 helpers: bpf_ringbuf_output(): 将数据写入 ringbuf。 bpf_ringbuf_reserve(): 为数据预留空间。 bpf_ringbuf_submit(): 阅读更多