eBPF Talk: trace XDP 程序

在 XDP 程序运行起来后,特别是在生产环境中,有没有办法去观察它的运行情况呢?特别是 XDP 程序的最终结果。 将问题泛化一下,即有没有办法去 trace bpf 程序? TL;DR 有

eBPF Talk: Ubuntu 23.04

Ubuntu 23.04 已在 4 月 20 日发布,可以到官网下载镜像安装到虚拟机,用来学习 eBPF。 Ubuntu 23.04 (Lunar Lobster) 使用的内核版本是 6.2.0-20-generic。 Ubuntu 23.04 的相关

eBPF Talk: introduce bpf_timer

bpf_timer 是 eBPF 里基于 hrtimer 实现的定时器。 hrtimers - subsystem for high-resolution kernel timers LWN bpf: Introduce BPF timers. bpf: Introduce bpf timers. since 5.15 kernel bpf_timer 最初的需求是在 perf events bpf prog 中做定期采样;后来在 XDP 中可以用来做垃圾回收和健康检

eBPF Talk: introduce bpf_iter

通过 Linux 网络: sequence file 的学习,我们知道在 Linux 里有不少地方都使用 sequence file 机制向用户态空间传递数据。 在 eBPF 的加持下,sequence file 机制迎来了更加灵活的实现

Linux 网络: netdevsim

netdevsim,Netwoking Device Simulator,网络设备模拟器。 GitHub netdevsim netdevsim 就是用来模拟网络设备的,其实它是 Linux 里的一种网络设备驱动;可

Linux 网络: sequence file

使用 ss、netstat 等命令查看 TCP 连接信息时,它们可能会从文件 /proc/net/tcp 读取 tcp socket 信息。 1 2 3 4 $ strace netstat -4 -t ... open("/proc/net/tcp", O_RDONLY) = 3 ... 而使用 file 命令查看 /proc/net/tcp 文件时,提示

eBPF Talk: verifier 支持有限循环

verifier 支持有限循环后,我们不再需要 #pragma unroll 将 for 循环展开了,留给 clang 编译器决定即可。 bpf: introduce bounded loops since 5.3 kernel. 也就是,eBPF Talk: binary search 里的 __should_delay_sip() 函数里不再需要 #pragma clang loop unroll(full) 了。

eBPF Talk: challenge verifier

在 eBPF Talk: binary search 中,我们使用一个朴素的 for 循环实现了一个二分查找的 eBPF 程序,但是,这个程序通不过 verifier,报错 “R3 unbounded memory access, make sure to bounds check any such acces

eBPF Talk: binary search

其实,bpf 子系统里并没有一个叫 bpf_binary_search() 的 helper 函数。 但并不是说,在 eBPF 里就实现不了二分查找了。 小需求 怎么判断一个 IP 地址是否在某几个 CIDR 里? 已知方法有二: