BPF及其衍生产物初见

摘要:
随着时间的推移,产生的不满和衍生产品自然有助于使用高级语言C编写BPF逻辑并通过编译器生成伪代码。然而,它仍然使用有限数量的C语言库,不支持使用外部库进行操作;同时,从今天的角度来看,它的代码在衍生应用程序中显然是多余的。
eBPF 的前身———— BPF

BPF 的全称是 Berkeley Packet Filter,又称 classical BPF(cBPF);顾名思义,这是一个用于过滤(filter)网络报文(packet)的架构,为 tcpdump 抑或 wireshark 乃至网络监控(Network Monitoring)领域的基石。

extended BPF(eBPF)产生之由

BPF 设计者们额外在 tcpdump 中设计了我们今天常见的过滤表达式,很大程度上推动了 BPF 的发展,此后数年,BPF 逐渐称为大众所认同,包括 Linux 在内的众多操作系统都开始将 BPF 引入了内核;Packet Filter 的功能得到了充分肯定。但同时,另一方面 BPF 用于定义 Filter 的伪代码为了执行要专门实现一个虚拟机,这也在一定程度上提高了开发和维护的门槛;因此它获得了进化————extended BPF。

extended BPF(eBPF)简述

eBPF 已经为内核追踪(Kernel Tracing)、应用性能调优/监控、流控(Traffic Control)等领域带来了激动人心的变革,在接口的设计以及易用性上,eBPF 也有了较大的改进。

eBPF 的 map 机制

位于用户空间中的应用在内核中辟出一块空间建立起一个数据库用以和 eBPF 程序交互(bpf_create_map());数据库本身以 Key-Value 的形式进行组织,无论是从用户空间还是内核空间都可以对其进行访问,使其在效率方面获得了无可比拟的优势————可以在运行时修改可编程的内核操作而无需重新编译,且复制字节极少。

In-kernel Verifier

cBPF 时代就开始加入了代码检查机制以防止不规范的注入代码;到了 eBPF 时代则在载入程序(bpf_load_program())时加入了更复杂的verifier 机制,在运行注入程序之前,先进行一系列的安全检查,可以保证绝对安全的获取内核执行信息,是内核调试和开发者的不二选择。

伴随时间产生的不满和衍生产物

利用高级语言 C 书写 BPF 逻辑并经由编译器生成出伪代码自然是便利了许多,但它时至今日仍使用数量有限的 C 语言库,并且不支持使用外部库进行操作;同时以今日的眼光来看待,其代码在衍生应用中明显存在冗余。

hXDP

在FPGA加速器上eBPF的许多指令存在冗余,以eBPF为基础,针对FPGA加速器将其精简设计得到了hXDP
评估hXDP时用了约15%的FPGA资源,在运行动态加载的程序时达到了高端CPU的数据吞吐量,并将数据包转发延迟降低了10倍
参考文档:
Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)
eBPF 简史
hXDP: Efficient Software Packet Processing on FPGA NICs
Fast Packet Processing with eBPF and XDP: Concepts, Code, Challenges, and Applications

免责声明:文章转载自《BPF及其衍生产物初见》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇org.openqa.selenium.NoSuchElementException:C11中的Unicode下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ArcGIS Pro 中文(简体)语言包-指定路径为空

在电脑上安装了ArcGISPro2.5,在安装中文(简体)语言包的时候,报错:指定路径为空。因此,新建立一个Chinese_CN项即可。经过上述修改,就可以成功安装中文(简体)语言包了。...

GPU与CPU

GPU和CPU CPU,也称为中央处理单元,主要由控制器、运算单元、寄存器、高速缓冲区和数据/控制/状态总线组成。GPU GPU称为GraphicsProcessingUnit,即图形处理器。GPU最初是为终端游戏设计的。由于对游戏中的大量数据重复相同的操作,GPU面临着类型高度统一、相互依赖的大规模数据。GPU的内核远多于CPU。它向多个内核发送相同的指令...

SQLServer2008/2012 安装、添加sa用户和密码、多实例安装、修改端口, 重启生效

因为我们无法使用sa用户登录,所以只能使用系统登录。登录后,我们需要修改相关属性。右键单击数据库,然后单击属性。在这个sa的登录属性对话框中,我们首先需要设置这个用户的密码。由于此用户名是系统的用户,我们可以直接填写密码,然后再次确认密码。然后在对话框中,单击左上角的第二个属性服务器角色。这是您要实现的添加用户的角色。...

建行手机银行4.0版本转账怎么不要求输入支付密码?

建行手机银行单笔限额50万,日限额100万,这个6位数的验证码价值50万元!输入6个数字的支付密码只需要几秒钟而已,转账操作频率不是很高,手机银行转账速度比人工柜台、ATM、电脑网银转账速度不知道快了多少倍,输入6个数字的支付密码这几秒钟相对安全性算什么呢?另外建行还有帐号支付的方式,对电子商户日限额10000元,只需要帐号+手机验证码就可以支付,密码都不用...

yml在线格式转换工具(properties)

目前springboot的配置文件已经同时支持properties和yaml格式。...