文章目录
前言
eBPF 是一门革命性的技术,可以在不修改内核源代码或者加载内核模块的情况下,安全和高效地拓展和增强Linux内核的功能,我们主要聚焦在eBPF在网络传输上的应用和实践🚀
基本概念
下面这张eBPF官网 https://ebpf.io/ 的一张图片
我们通过eBPF可以安全地进行网络的观测和追踪
有很多优秀的eBPF项目,比如cilium,falco,katran,pixie
eBPF允许我们使用go,c/c++,rust等语言进行开发
eBPF的代码一般具有内核层代码和用户层代码
eBPF的生命周期之旅
-
我们首先使用eBPF SDKs开发完代码
-
然后将代码编译为eBPF字节码
-
之后调用bpf系统调用,将eBPF字节码加载到内核
-
内核使用Verifier对eBPF字节码进行合法性和安全性检查
-
通过检查后使用JIT将eBPF字节码编译成本机指令集的机器码
-
然后将eBPF程序挂载到指定位置的内核hook点,当hook点触发时执行对应的eBPF程序,hook点可以是系统调用、内核函数、等等
-
eBPF内核层代码和用户层代码通过eBPF Maps进行数据交互
eBPF Maps的实现原理是基于内核分配的内存区域,使用 eBPF 虚拟文件系统(eBPF VFS)进行抽象,然后内核层和用户层可以通过操作抽象出来的fd进行数据的交互,其实本质是内存共享
最后
我们现在应该对于eBPF有了一个初步的认知和理解,我之后写一个简单的eBPF程序来加深印象