

eBPF介绍
source link: https://blog.spoock.com/2023/08/12/eBPF-intro/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

BPF历史
BPF
是Berkeley Packet Filter
(伯克利数据包过滤)的缩写,诞生于1992年。当时设计的BPF具有以下两个特性:
- 内核态引入一个新的虚拟机,所有的指令都在内核虚拟机中运行;
- 用户态使用BPF字节码来定义过滤表达式,然后传递给内核,由内核虚拟机解释执行;
BPF技术是的包过滤可以直接在内核中执行,避免向用户态复制每个数据,从而极大提升了包过滤性能。
1997年之后,内核2.1.75
引入了BPF技术。
在Linux3.0
中增加了BPF即使编译器,替换了原来性能较差的解释器,优化了BPF指令运行的效率。但当时,BPF的应用还是局限在网络包过滤这个领域。
eBPF历史
在2014年,Alexei将BPF扩展为一个通用的虚拟机,即eBPF。eBPF不仅扩展了寄存器的数量,引入了全新的BPF映射存储,同时还在4.x内核中将原本单一的数据包过滤事件扩展为内核态函数、用户态函数、跟踪点(tracepoint
)、性能事件(perf_eevents
)以及安全控制。
eBPF的诞生是BPF技术的一个转折点,使得BPF不在局限于网络栈,而是成为内核的一个顶级子系统,目前eBPF广泛用于网络、安全、可观测等领域。 由于eBPF无需修改内核源代码和无需编译内核就可以扩展内核的功能,Cilium、Katran、Falco等一系列基于eBPF优化网络和安全的开源项目也逐步诞生。
eBPF的整个发展流程如下:
eBPF原理
eBPF本质是针对特定的事件才会触发,诸如系统调用、内核跟踪点、内核函数和用户态函数的调用退出、网络事件等。
eBPF的运行机制是,利用LLVM将编写的eBPF程序转换为BPF字节码,然后通过bpf系统调用提交给内核执行。内核在接受BPF字节码之前,会首先通过验证器对字节码进行教案,只有校验通过才会提交到即时编译器执行。
虽然eBPF的功能很强大,但是为了保证内核安全,对eBPF的程序也有很多的限制。
- eBPF程序必须被验证器校验通过之后才能执行,且不能包含无法到达的指令;
- eBPF程序不能随意调用内核函数,只能调用在API中定义的辅助函数;
- eBPF程序栈空间最多只有512字节,可以通过映射保存;
- 在内核5.2之前,eBPF字节码最多只支持4096条指令,而5.2内核提升至100万条;
- 由于内核的快速变化,在不同版本内核中运行时,需要访问内核数据结构的eBPF程序就需要修改源代码重新编译;
极客时间
BPF之巅
Recommend
-
38
Introduction Networks are fun to work with, but often they are also a source of trouble. Network troubleshooting can be difficult, and...
-
38
Interested in writing eBPF programs? In this blog, this will be our focus — the process of writing eBPF programs. For reference, in thefirst part of this series, we took a high level look at the generic architecture of e...
-
39
Posted on 15/04/2019 by Adrian Ratiu Share this post:
-
5
一直想写(整理)一些关于 eBPF 的文章。在我眼中,它是 未来技术 之一。 最近零零碎碎看了一些,感觉信息太多,怕是永远也看不完,索性开始一遍看一边记笔记吧。这一篇是介绍。 eBPF 是什么 先介绍下 eBPF 的前身: BPF ->
-
7
eBPF原理介绍与C语言实现eBPF程序 发表于 2022-03-22...
-
4
前言¶ 大家在阅读一些网络相关的 ebpf 程序源码时可能会发...
-
1
eBPF 介绍 eBPF 介绍 很早前就想写一篇关于eBPF的文章,但是迟迟没有动手,这两...
-
14
编写eBPF除了对eBPF的机制要要了解之外,还需要一些额外的辅助文件。基本上编写需要的文件已经全部打包在libbpf目录中。libpf对应的仓库是: https://github.com/libbpf/libbpf
-
9
针对 vArmor-ebpf 中的每个Hook函数进行分析。同时为了方便针对 vArmor-ebpf 项目进行测试,开发了...
-
4
vArmor-ebpf-loader 项目介绍和功能解读 2024年01月03日 2024年01月03日...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK