探索BPF:从基础到首个程序运行
1. 复杂系统中的可观测性与BPF的诞生
在过去的几十年里,计算系统的复杂性不断增加。为了深入了解软件的行为,人们采用了多种方法。常见的有分析日志和使用指标。日志能提供应用程序行为的精确数据,但受限于开发者在日志中暴露的信息;指标则是聚合数据,用于衡量程序在特定时间点的行为。
可观测性是一种新兴的实践方法,它旨在回答任意问题并从系统中获取复杂答案。这要求收集系统能生成的所有数据,并在必要时进行聚合。
在软件工程中,“黑天鹅”事件(意外且影响重大的事件)很常见且不可避免。可观测性通过收集能回答未来问题的所有数据,帮助构建健壮的系统,降低“黑天鹅”事件的影响。
Linux容器基于内核的命名空间(namespaces)和控制组(cgroups)实现进程隔离和资源管理。随着Linux容器的流行,软件工程师在设计大型分布式系统和计算平台时发生了转变。而内核作为事件驱动系统,伯克利数据包过滤器(BPF)应运而生,它能安全地执行内核事件触发的程序,为系统开发者提供了新的观测和操作工具。
2. BPF的发展历程
- 起源(1992年) :Steven McCanne和Van Jacobson在论文中介绍了用于Unix内核的网络数据包过滤器BPF,它比当时的技术快20倍。BPF引入了两个重要创新:为基于寄存器的CPU设计的新虚拟机(VM),以及使用每个应用程序的缓冲区过滤数据包,减少了决策所需的数据量。这使得Unix系统广泛采用BPF进行网络数据包过滤。
- 扩展BPF(2014年初) :Alex
超级会员免费看
订阅专栏 解锁全文
2655

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



