当前位置:首页 > 报告详情

分会场1_范佳明_迈向eBPF并发领域的内存模型_报告PPT.pdf

上传人: 科*** 编号:713418 2025-06-08 47页 670.98KB

1、迈向eBPF并发领域的内存模型第三届 eBPF开发者大会w w w.e b p f t r a v e l.c o m中 国 西 安范佳明 南京大学第 三 届 e B P F 开 发 者 大 会 问题背景 什么是 BPF 内存模型 BPF 指令的内存语义 与 LLVM 的集成 未来方向目录在很多开发者心中,eBPF 是不是一种简单的、单线程的沙箱系统?但你有没有想过:多个 BPF 程序是否可能同时访问共享内存?第 三 届 e B P F 开 发 者 大 会0.问题背景在很多开发者心中,eBPF 是不是一种简单的、单线程的沙箱系统?但你有没有想过:多个 eBPF 程序是否可能同时访问共享内存?答

2、案是:当然可以,甚至已经发生了。第 三 届 e B P F 开 发 者 大 会0.问题背景第 三 届 e B P F 开 发 者 大 会0.问题背景一个 race condition 的例子,如果下面的代码在多个 CPU 上同时运行bpf_printk 的结果应该是什么:?第 三 届 e B P F 开 发 者 大 会0.问题背景一个 race condition 的例子,如果下面的代码在多个 CPU 上同时运行bpf_printk 的结果应该是什么:取决于内存模型第 三 届 e B P F 开 发 者 大 会0.问题背景什么是内存模型?A memory model defines outco

3、mes of concurrent accesses-Paul E.McKenney第 三 届 e B P F 开 发 者 大 会0.问题背景举例来说,对于同一内存(a=0),一读(read(a))一写(a=1)的情况,不同的内存模型如何定义结果?C/C+内存模型:未定义行为(UB)“Any data race results in undefined behavior.”C+11 standard 1.10在理论模型中,你甚至可能观察到 a=42,即 OOTA(Out-of-Thin-Air)行为 第 三 届 e B P F 开 发 者 大 会0.问题背景举例来说,对于同一内存(a=0),一

4、读(read(a))一写(a=1)的情况,不同的内存模型如何定义结果?C/C+内存模型:未定义行为(UB)“Any data race results in undefined behavior.”C+11 standard 1.10在理论模型中,你甚至可能观察到 a=42,即 OOTA(Out-of-Thin-Air)行为 Linux Kernel Model:要么是新值 1,要么是旧值 0,但不会是凭空出现的值(OOTA)内核文档 memory-barriers.txt section:All memory-reference instructions 第 三 届 e B P F 开 发

5、者 大 会0.问题背景那么,eBPF 程序的内存模型是什么呢?实际上,eBPF 的内存模型一直没有被提出,BPF 只是 instruction set,却没有定义自己的 memory model 直到 2023 年,Paul E.McKenney 提出了Instruction-Level BPF Memory Model11 https:/ 三 届 e B P F 开 发 者 大 会1.什么是 BPF 内存模型三层并存的内存模型结构高级语言内存模型 C/C+/RustBPF 指令级模型(Today)硬件内存模型X86/ARMv8 编译器(LLVM)JIT(x86/ARM)第 三 届 e B P

6、 F 开 发 者 大 会1.什么是 BPF 内存模型三层并存的内存模型结构高级语言内存模型 C/C+/RustBPF 指令级模型(Today)硬件内存模型X86/ARMv8 编译器(LLVM)JIT(x86/ARM)BPF 内存模型就处于将高级语言转接到硬件指令的转接层举例:BPF 程序中 store_release()LLVM BPF JIT ARMv8如果 BPF 无法表达 store 是 release 的,那么下层 jit 可能不会插入合适的 memory-barrier,导致程序出现诡异的错误!第 三 届 e B P F 开 发 者 大 会1.什么是 BPF 内存模型为了理解 BPF

word格式文档无特别注明外均可编辑修改,预览文件经过压缩,下载原文更清晰!
三个皮匠报告文库所有资源均是客户上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作商用。
本文主要讨论了eBPF(扩展Berkeley数据包过滤器)的内存模型,特别是在并发访问场景下的表现。以下是关键点: 1. eBPF并非单线程沙箱,多个eBPF程序可同时访问共享内存。 2. eBPF内存模型直到2023年由Paul E. McKenney提出,此前未明确定义。 3. eBPF内存模型涉及三层结构:高级语言内存模型、BPF指令级模型、硬件内存模型。 4. BPF指令分为四类,其中原子指令具备全序属性,而加载和内存引用指令不提供内存序保证。 5. LLVM对eBPF后端的原子操作支持有限,但提供了部分API如`__atomic_exchange_n`。 6. 当前BPF原子指令默认提供全屏障,但未来可能增加ACQ/REL指令以允许更细粒度的内存序控制。 7. 未来发展方向包括在Verifier与分析层提供更好的决策支持,并通过形式化验证提高eBPF程序的安全性。 文章强调了即使在并发领域,eBPF的安全性也是其核心特征之一。
"eBPF内存模型揭秘" - "多核并发下,eBPF如何保证内存访问安全?" "探索BPF并发世界" - "原子操作中,如何精妙控制eBPF内存顺序?" "走进eBPF的未来" - "eBPF在强化安全性方面,未来有哪些新方向?"
客服
商务合作
小程序
服务号
折叠