基于 CO-RE(Compile Once – Run Everywhe)实现的 Coolbpf 项目,新推出轻量级脚本化编程特性 lwcb(Lightweight Coolbpf)。lwcb 是一款面向 eBPF 的脚本语言和 tracing 开发工具,它可以解析用户编写的脚本,生成 eBPF 字节码,从而实现对 Linux 内核系统的跟踪诊断、性能分析和监控。此外,lwcb 还提供了大量内置函数,如 tcpstate 可以轻松将整数转换成 tcp 状态字符串,tcphdr、iphdr 可以让用户从 skb 里获取 tcphdr 或 iphdr 结构体,有助于快速编写内核网络相关的 eBPF 程序。lwcb 也让用户方便地添加更多的内置函数,覆盖更多应用场景。
01 lwcb 特性
轻量级、易部署
lwcb 使用 rust 开发了一个小巧的解析器,不依赖于 Clang。它采用轻量级的编译器,并且为编译器添加了 eBPF 后端,使其不需要依赖于 llvm。lwcb 编译后只有一个大小约为 8MB 的独立二进制程序,部署非常方便快捷。以往部署 BCC 和 bpftrace 等工具,需要在目标执行机器上安装一堆编译和运行库。
脚本化、开发快
lwcb 当前支持类似于 bpftrace 的脚本解释执行能力,优势是不需要编译。同时提供了更多内置函数,方便开发和使用。另外,他天然支持 CO-RE 的能力,在不同内核版本上安全运行。可以说,功能比较强大。
lwcb 功能性强主要体现在以下几点:
1. 更多的内置函数:如tcphdr、iphdr、tcpstate 等等。
2. 探测点函数参数自动注入功能:
lwcb -t 'kprobe:tcp_rcv_established { ih = iphdr(skb); print("sip: %s dip: %s\n", ntop(bswap(ih->saddr)), ntop(bswap(ih->daddr))); }'
用户可以直接访问 tcp_rcv_established 函数的 skb 参数,进而获取 IP 地址和端口号信息。
3. 支持 BTF,能够进行类型推导。如 th = tcphdr(skb);,lwcb能够根