lyft|入门即享受!coolbpf 硬核提升 BPF 开发效率( 五 )


缺点:
需要搭建代码工程、开发效率低; 不同内核版本兼容性差; 2)BCC(BPF Compile Collection、python 代码)
优势:开发效率高 , 可移植性好 , 支持动态修改内核部分代码
缺点:
部署依赖的 Clang/LLVM; 每次运行都要执行 Clang/LLVM 编译 , 争抢内存 CPU 内存等资源; 依赖目标环境头文件; 3)BPF CO-RE(libbpf-tools 下面的代码)
优势:不依赖在环境中部署 Clang/LLVM , 资源占用少
缺点:
仍需要搭建编译编译工程; 部分代码相对固定 , 无法动态配置; 用户态开发支持信息较少 , 缺乏高级语言对接; 综上所述 , 上述方案不能很好适配生产环境中 , 多内核并存、快速批量部署等需求
4.2 Coolbpf(可以酷玩的 BPF)解决的问题
通过将 BPF 的三种开发方式对比 , 我们发现都不能完美的在生产环境中解决如下几个问题:
安装依赖库和内核头文件; CPU 和内存等资源瞬时冲高; BTF 需要按版本随 BPF 二进制程序发布 。为解决这几个问题 , 我们提出一个 coolbpf 的开发编译平台 , 目前包含 pylcc、rlcc、golcc 等目录 , 分别是高级语言 python、rust 和 go 语言支持远程和本地编译的能力 。
代码链接地址:https://gitee.com/anolis/coolbpfhttps://github.com/aliyun/coolbpf
这里不对 coolbpf 过多介绍 , 具体内容请参考《龙蜥社区开源 coolbpf , BPF 程序开发效率提升百倍》 。
4.3 pyLCC 的享受式
为了介绍什么叫享受式开发 , 在这里我们拿 coolbpf 的 pyLCC 进行演示:
import sysfrom pylcc.lbcBase import ClbcBase CexecCmd //import pylcc base库bpfProg = r\"\"\"struct data_t { int cpu; int type; // 0: irq 1:sirq u32 stack_id; u64 delayed;;LBC_PERF_OUTPUT(e_out struct data_t 128); //定义perf event output array mapLBC_STACK(call_stack 256); //定义stack 的mapSEC(\"kprobe/check_timer_delay\")int j_check_timer_delay(struct pt_regs *ctx){ struct data_t data = https://mparticle.uc.cn/api/{; data.cpu = PT_REGS_PARM2(ctx); data.type = PT_REGS_PARM1(ctx); data.delayed = PT_REGS_PARM3(ctx); data.stack_id = bpf_get_stackid(ctxcall_stack KERN_STACKID_FLAGS); bpf_perf_event_output(ctxe_out BPF_F_CURRENT_CPUdata sizeof(data)); return 0;/"\"\"class Crunlatency(ClbcBase): def __init__(self lat=10): self._exec = CexecCmd self.setupKo(lat1) //只需要简单的init , 就可以把open load attach 等动作做好 , 然后专注于数据处理 super(Crunlatency self).__init__(\"runlatency\" bpf_str=bpfProg) def _cb(self cpu data size): stacks = self.maps['call_stack'
.getStacks(e.stack_id) print(\"call trace:\") //call back函数里专心处理数据 for s in stacks: print(s) 大家看到上面的示例 , 只需要以下三步 , 就可以完成一个程序的开发:
1)pip install coolbpf 。
2)编写 bpf.c 代码 。
3)编写 python , 通过 init() 加载之后 , 就专注功能开发 。
你可以不用关心 BPF 的汇编、字节码 , 也不用安装 Clang , 不用安装 kernel-dev 头文件 , 不用自己生成 BTF 文件(它会自动到远程服务器下载) , 只需专注你的功能开发 , 比如分析网络流量、监控文件打开和关闭、跟踪系统调用 。
总结来看 , BPF 技术还在如火如荼的发展着 , 但只要掌握了这些基础的知识点 , 就能够触类旁通 , 利用好已有的工具或平台 , 更加能如虎添翼 。 通过前面的介绍 , 我们不仅对 BPF 有了比较深刻的理解 , 还能借助 coolbpf , 非常酷的玩了一把享受式的开发 , 简洁如此 , 谁能不爱呢?
本文为阿里云原创内容 , 未经允许不得转载 。