欢迎光临散文网 会员登陆 & 注册

优点知识eBPF开发实践 全

2023-05-24 20:10 作者:戰億殇  | 我要投稿

编写和编译代码

eBPF代码通常是用“限制性C”编写的,然后编译成eBPF字节码。Clang是事实上的编译标准。

在编写代码时,可以引用bpf_helper函数来执行各种常见操作,如内存复制、检索PID和时间戳属性以及与其他应用程序通信(需定义eBPF数据结构,eBPF maps)。因此,你通常不必从头开始编写大量自定义代码。定制代码仅限于你想要实现的特定功能。

检验与加载

要部署已编译的eBPF程序,首先调用bpf()系统调用,它将字节码传递给内核检验器。内核检验器的工作是确保程序不会对内核造成问题。如果验证成功,内核JIT编译器将把它转换为可执行的机器代码。

运行时(runtime)

加载并验证后,程序就可以执行了。它将监视你附加到的任何代码流—无论是在内核空间、用户空间还是两者都有。一旦它运行,你就可以使用eBPF映射或预定义的文件描述符访问程序输入或输出。

下面摘自Cilium的Golang eBPF框架的部分代码片段应该有助于说明这个过程(上面是eBPF代码,下面是加载eBPF程序并与之通信的用户空间应用程序)。在编译和运行应用程序时,它将计算系统上正在执行的新程序的数量。很整洁!


优点知识eBPF开发实践 全的评论 (共 条)

分享到微博请遵守国家法律