eBPF介绍

eBPF介绍

2023年7月23日发(作者:)

eBPF介绍⼀、简介提到这个eBPF,就不得不提到BPF(Berkeley Packet Filter),它是⼀个⽤于过滤filter⽹络报⽂packet的架构。它是tcpdump 或wireshark 甚⾄⽹络监控基础构件。它始于1992 发⾏在 USENIX conference 上的⼀篇论⽂:The BSD Packet Filter: A NewArchitecture for User-level Packet Capture。最初 BPF 是实现于 BSD 系统之上的,所以论⽂中称做“BSD Packet Filter”,但是随着后来由于 BPF 的理念逐渐成熟,B不代表 BSD⽽是Berkeley即Berkeley Packet Filter。它主要有两个功能 即:过滤(Filter):即以输⼊的规则过滤报⽂;复制(Copy):将规则内的报⽂从内核空间复制到⽤户空间;⼆、分析BPF 的报⽂过滤设计是建⽴在 if-else 的控制流flow graph之上的过滤器【CFG(Computation Flow Graph)】,快就是它最明显的特征,在论⽂中对CFG 和 CSPF 两种模型进⾏了初步的分析⽐较,认为 CFG 模型则运算量更⼩。同时,引⼊的伪指令集,也增加了相关设计的复杂性。⼀定程度上提⾼了开发和维护的门槛。为了提⾼易⽤性,BPF提供了tcpdump 过滤表达式(依赖 libpcap,都源于 Lawrence Berkeley Lab)并且其设计⽬标只有过滤字节流形式的报⽂,其相关的虚拟机及其伪指令集更简约:虚拟机只有两个 32 位寄存器,即运算累加器 A 和通⽤寄存器 X;指令集20个左右。易⽤性推动了 BPF 的发展,随后Linux将其 引⼊了内核。三、内核的应⽤1997 年,在Linux2.1.75中BPF引⼊了内核。但是内核中的BPF和传统的仍然是有⼀些不同:1、接⼝:传统的 BSD 开启 BPF 的⽅式主要是靠打开open /dev/bpfX 设备,之后利⽤ ioctl 来进⾏控制2、 linux 则选择了利⽤套接字选项sockopt SO_ATTACH_FILTER/SO_DETACH_FILTER 来执⾏系统调⽤。在内核中 3.18 前, BPF 的实现基本在 net/core/filter.c 下,主要函数有两个,sk_attach_filter() 和 sk_run_filter():前者将 filter 伪代码在⽤户空间和内核空间的复制;后者进⾏报⽂伪码解析BPF 直到 3.0 进⾏了较⼤的版本更新⽀持了⽤于提速的 JIT (Just-In-Time) Compiler。从Linux 3.15~3.17 在 kernel/bpf ⽬录下实现了 extended BPF(eBPF),extended 就是扩展,加强的意思;传统的 BPF 被重命名为 classical BPF(cBPF)。它主要有两个改进:1、它极⼤改善了内核追踪Kernel Tracing、性能调优/监控、流控Traffic Control等2、eBPF 在接⼝设计上也有了更⼤的进步。换句话说,到了 eBPF 的出现,利⽤C等⾼级语⾔编写 BPF成为了现实。四、主要项⽬编写相关代码,⼀般都是通过⼆次封装的相关项⽬进⾏,主要包括1、bccBCC是⽤于编写eBPF的内核追踪和操作的⼯具包。2、bpftracebpftrace是Linux eBPF的⾼级追踪语⾔。3、CiliumCilium是⼀个开源项⽬,提供基于eBPF的联⽹,安全性和可观察性。4、FalcoFalco是⼀种⾏为活动监视器,即检测应⽤程序中的异常活动。5、KatranKatran是⼀个C ++库和eBPF程序,⽤于创建负载平衡转发。6、SysdigSysdig是⼀个简单⼯具,可以监测内核,并⽀持对容器的原⽣⽀持。其他kubectl-trace ,ply 等,不⼀⼀列举。五、应⽤编写实际应⽤的话,需要了解下⾯的具体的内容:1、map(映射) :发现好多都是使⽤这个东西进⾏交互啊(安卓的FrameWork)BPF也是,内核上运⾏的代码和加载了该代码的程序通过其来进⾏通信。BPF映射类型有很多,哈希表,数组等。2、验证器直接进内核东西,如果不检查的严格⼀些,结果是什么,不想都知道。它就是⽤来对所有的相关内容进⾏检查的,防⽌导致内核的崩溃。3、钩⼦(hook)事件驱动中⼀般都要有⼤量的钩⼦,旭XDP,trace,Socket等。4、帮助函数eBPF程序能调⽤帮助函数,它最稳定。了解这些内容后,再辅以上⾯的封装框架或者说库,按要求操作,就可以写出标准的应⽤程序了。六、总结其实听到eBPF内有钩⼦就想到了⽹络和安全,就想到了跟踪和故障处理分析,这些都是可以⽤钩⼦来过滤的。⽽对于⼀些云应⽤领域,同样可以通过其进⾏⼀些命令⼯具的优化问题,如解决iptables带来的性能问题,它和WASM⼀样,都是最近⽐较⽕的⼀种基础技术,不要⼩看技术的进步,它会带来整个应⽤体系的⾰命性的变化。风起于青萍之末。努⼒吧,归来的少年!

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690100412a305987.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信