泛读Linux内核观测技术BPF-01

【欢迎关注微信公众号:qiubinwei-1986】

9月开始了,前期定的关于eBPF的相关计划,由于学习难度和成本太高了,一直处于翻开书就放弃阶段,直到近期,在外部压力下迫使自己不得不临时放下Linux内核的学习,通过代价高昂的上下文切换,过渡到Linux的eBPF学习上。

由于BPF手上的纸质文档有限,计划先花1周左右时间,先把如下这本书泛读一遍,加深印象,在通过有的放矢的方式针对其中对现阶段最有价值的内容进行深入学习。

这本书带上引言,一共八章,相比较Linux内核的板砖材料,这本书基本就是小儿科了。每天可以放在书包里面背着。(Linux内核的书,我在公司和家里各放了一套,免去板砖的烦恼)。

序言

BFP和XDP工具可以取代现有的iptables的工具集,同时BPF具备向上兼容性,所以可以在任意新版本内核内执行,不向iptables,可能存在多个版本中指令集参数不一致导致命令执行失败,需要维护多套环境的问题。

此外容器网络工具Cilium也正在采用BPF和XDP进行构建,优化K8S网络流量路径,从现在的kube-proxy的流量转发路径进行优化,降低网络内部转发流程,提高整体网络IO性能, 同时也能降低问题排查路径。

在作者的观点中,认为黑天鹅事件,如果在事件发生前就进行观测,大部分事件都是可预料的,通过观测到的相关数据可以降低风险。因此可观测性有助于我们构建健壮的系统,减少黑天鹅事件的产生。它的前提条件是我们正在收集的任何数据都能回答未来的任何问题。

所以对黑天鹅事件的研究和可观测性的实践,核心是从系统中收集到的数据。

BPF历史

BPF(Berkeley Packet Filter ),中文翻译为伯克利包过滤器,是类 Unix 系统上数据链路层的一种原始接口,提供原始链路层封包的收发。1992 年,Steven McCanne 和 Van Jacobson 写了一篇名为《BSD数据包过滤:一种新的用户级包捕获架构》的论文。在文中,作者描述了他们如何在 Unix 内核实现网络数据包过滤,这种新的技术比当时最先进的数据包过滤技术快 20 倍。BPF 在数据包过滤上引入了两大革新:

  • 一个新的虚拟机 (VM) 设计,可以有效地工作在基于寄存器结构的 CPU 之上;

  • 应用程序使用缓存只复制与过滤数据包相关的数据,不会复制数据包的所有信息。这样可以最大程度地减少BPF 处理的数据;

由于这些巨大的改进,所有的 Unix 系统都选择采用 BPF 作为网络数据包过滤技术,直到今天,许多 Unix 内核的派生系统中(包括 Linux 内核)仍使用该实现。

2014年初,Alexei实现了eBPF, eBPF生成的指令集比旧的BPF解释器生成的机器码执行的更快。eBPF实现的最初目标是优化处理网络过滤器的内部BPF指令集,但随着2014年6月eBPF扩展到用户空间,成为了BPF转折点。BPF不再局限于网络栈,而是成为了内核顶的子系统。

架构

编译器

BPF是一种高级虚拟机,在内核态内运行的虚拟机,执行代码指令。BPF使用LLVM编译器,将C代码编译成BPF指令。

验证器

代码编译后,BPF使用BPF验证器来去报程序在内核中安全运行。BPF验证器能够阻止潜在导致内核不稳定、崩溃的代码。

JIT编译器

如果代码通过了验证,BPF程序将被加载到内核中,Linux内核为BPF指令集成了JIT编译器,JIT编译器会将BPF字节码转换成机器代码,从而减少运行时的时间开销。该架构具有一个非常灵活的特点就是加载BPF程序时无需通过重启Linux系统生效

执行点

在内核运行BPF程序前,需要知道程序附加的执行点。程序执行点由BPF程序类型确定。不同的执行点对应内核中不同的帮助函数,这些帮助函数可用于处理程序接收的数据,从而使执行点和BPF程序能够紧密配合

BPF映射

BPF映射负责在内核和用户空间之间共享数据。BPF映射提供双向的数据共享,包括一些数据结构类型,从简单数组、哈希映射到自定义映射。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值