ebpf的官网:https://ebpf.io/zh-hans/
eBPF 是 Linux 内核里的“可编程显微镜”,
能以极低开销,把 CPU、内存、网络、IO、系统调用的真实行为实时暴露出来。
eBPF 能做什么(能力全景表)
| 分类 |
eBPF 技术 / Hook 点 |
能解决的问题 |
典型场景 / 示例 |
| 系统调用观测 |
tracepoint / kprobe / kretprobe |
看清进程在调用哪些 syscall、参数与返回值 |
追踪 open/mmap/brk/execve,定位异常行为 |
| 函数级插桩 |
kprobe / fentry / fexit |
精确到内核函数级别的性能与行为分析 |
追踪 do_mmap、schedule、VFS 路径 |
| CPU 调度分析 |
tracepoint:sched_* |
调度延迟、抢占、上下文切换 |
查 CPU 抖动、延迟尖刺 |
| 内存分析(内核) |
tracepoint + kprobe |
内存分配/释放、泄漏、碎片 |
统计 mmap/munmap/brk |
| 内存分析(用户态) |
uprobe / uretprobe |
malloc/free 调用栈、泄漏定位 |
替代 Valgrind 的在线方案 |
| 网络包处理(高速) |
XDP |
L3/L4 高速包处理、丢包/转发 |
DDoS 防护、L4 LB、包过滤 |
| 网络流量控制 |
tc (clsact) |
QoS、限速、流量整形 |
出口限速、优先级队列 |
| Socket 观测 |
socket filter / cgroup skb |
应用级网络可观测 |
HTTP、RPC 流量统计 |
| 安全审计 |
LSM hooks / tracepoint |
行为审计、入侵检测 |
非法 syscall、提权检测 |
| 进程生命周期 |
tracepoint:task_* |
进程创建/退出追踪 |
监控僵尸进程、异常 fork |
| 文件系统观测 |
kprobe / tracepoint |
文件读写、权限、延迟 |
VFS 热点、慢 IO |
| 磁盘 IO 分析 |
tracepoint:block_* |
IO 延迟、队列拥塞 |
慢盘定位、IO 放大 |
| 性能剖析 |
perf_event |
CPU 火焰图、热点函数 |
低开销在线 profiling |
| 跨层关联分析 |
map + ringbuf |
用户态↔内核态因果链 |
请求 → syscall → IO |
| 可编程数据面 |
maps(hash/array/LRU) |
状态保存、聚合、过滤 |
计数器、白名单 |
| 低开销监控 |
CO-RE |
一次编译,多内核运行 |
生产环境长期运行 |
eBPF 的核心优势(一眼看懂)
| 维度 |
传统方案 |
eBPF |
| 开销 |
高(strace/valgrind) |
极低(可长期运行) |
| 粒度 |
粗 |
函数/参数级 |
| 在线性 |
多为离线 |
在线、实时 |
| 侵入性 |
高 |
无侵入 |
| 安全性 |
不可控 |
内核验证器保障 |
典型产品 / 项目(理解落地)
| 方向 |
代表 |
| 性能分析 |
perf, bcc, bpftrace |
| 可观测性 |
Cilium, Pixie |
| 安全 |
Falco, Tetragon |
| 网络 |
Cilium (XDP/tc) |
| 自研工具 |
进程/内存/IO 专项 eBPF 工具 |