本篇文章概述了 BPF 的主要应用,重点描述了 libbpf-tools 解决了哪些 BCC 痛点以及在 PingCAP 内部的相关实践。
BPF 最初代表 Berkeley Packet Filter,但在 Linux 中已扩展为通用内核执行引擎,能够运行新型的用户定义和内核模式应用程序。近几年来,BPF 子系统越发火热,迄至 Linux 5.8 内核,Linux 内核已经支持 30 种 eBPF 程序类型,遍布于内核各个角落,引起了广泛关注及热议,在 LWN 上甚至出现过 Why don’t we rename Linux to BPF-kernel? 这样的嘲讽评论,不过更多的是一些理性的讨论。除上周在 CNCF 和大家分享的 BPF 在 Chaos 领域的应用外,目前 BPF 主要应用于:
-
跟踪和探测,最有名的应用当属 BCC;
-
网络功能 (XDP/TC),用于反 ddos,负载均衡等,K8S 平台有著名的 Cilium;
-
内核安全策略;
-
内核回调接口,这种新架构可用于允许 BPF 程序替换内核中的任何 “ops 结构 ( struct xxx_ops ) ,社区大佬对此功能的评价是:march towards becoming BPF runtime-powered microkernel,目前 TCP 拥塞算法已用此框架实现,感兴趣的可以体验下;
-
迭代器:dump 内核数据;
-
… …
这些功能都非常酷,其中上述一些应用的背后有着一个重要的基础功能 BTF 做支撑, BTF 的一个用途是实现 BPF CO-RE (Compile Once – Run Everywhere)重定向,我们来看下如何基于 BPF CO-RE 替代 BCC 工具来获得更好的体验。

本文探讨了BPF在跟踪、网络、安全等领域的应用,特别是libbpf-tools相较于BCC的优势,包括减少内存开销、简化开发流程及提高性能。在PingCAP内部,已成功将多个BCC工具转换为libbpf+BPFCO-RE,优化了IO分析和调度器调优工作。
最低0.47元/天 解锁文章
868

被折叠的 条评论
为什么被折叠?



