2.2 Android ebpf帮助函数解读(一)

写在前面

    在开始我们的helloworld之前,我们先了解下内核ebpf子系统为我们提供了哪些能力。这样我们后面编写起来才会游刃有余。

    前面讨论过,我们所编写的用户空间的eBPF程序并不能直接调用内核函数,而是通过bpf帮助函数来帮助我们完成对内核能力的调用,并填充对应的数据结构map,然后通过map以达到用户空间进程和内核空间的数据分享。那么我们这里bpf-helpers中列出了eBPF的帮助函数API。

    做过前段或者app的同学可能比较熟悉了,api有多少决定了你的程序的功能有多丰富。那么接下来我们来看下这些eBPF帮助函数API。

一,eBPF帮助函数简介

    扩展的伯克利包过滤器(eBPF)子系统是由伪汇编语言编写的程序,然后附加到一些内核钩子中,并在特定事件触发下运行。eBPF与较早的BPF(或“eBPF”)有很大的区别。其中之一就是它可以在程序中调用特定的函数(帮助函数)。这些帮助函数定义在内核当中。

    eBPF程序可以使用这些帮助函数来完成与系统(内核)的交互,例如,它们可用于打印调试消息,获取系统启动时间,访问eBPF映射,或者操作网络数据包。但由于不同的eBPF程序类型,运行在不同的上下文中,因此每个eBPF程序需要定义其类型,并只能访问该类型对应的帮助函数API子集,而不是全部的帮助函数API。

    按照eBPF的约定,一个helper不能超过五个参数。

    在内部,eBPF程序可以直接调用已编译的帮助函数,而不需要任何外部函数接口。因此,调用helpers不会引入任何开销,因此eBPF的性能优势非常明显。

    下面我们

猜你喜欢

转载自blog.csdn.net/huangyabin001/article/details/130997894
2.2