eBPF 核心技术与实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
10452 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 26 讲/共 37 讲
eBPF 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

年度总结|eBPF的2022之旅

你好,我是倪朋飞。
不知不觉间,2022 年已经走到了尾声。每个年尾我都喜欢回顾一下过去这一年的旅程,看看过去这一年都发生了什么事情,有什么收获,有什么遗憾,有什么值得期待的事情等等。对 eBPF 的学习和应用也是一样,今天的内容我就带你一起总结一下 eBPF 在 2022 年的旅程。

eBPF 内核的新进展

作为 Linux 内核的一部分,我们先从内核来看看 eBPF 在 2022 年中都有哪些新的变化。
Linux 内核在 2022 年主要发布了 5.16-5.19 以及 6.0 和 6.1 这几个版本,每个版本都为 eBPF 引入了大量的新特性。具体来说,每个版本引入的主要特性包括:
Linux 5.16 为 eBPF 添加了布隆过滤映射(Bloom Filter Map)、原生跟踪可写上下文等特性,并允许在 eBPF 程序中直接调用内核模块函数。为了确保安全,非特权 eBPF 程序改成了默认不允许状态。
Linux 5.17 为 eBPF 添加了一次编译到处执行(Compile Once – Run Everywhere,简称 CO-RE)以及 bpf_loop() 辅助函数,大大简化了 eBPF 程序处理多版本内核兼容时的复杂性以及循环逻辑的处理。
Linux 5.18 为 eBPF 添加了内核探针多挂载(BPF_LINK_TYPE_KPROBE_MULTI)、在 XDP 程序 bpf_prog_run() 中传输数据包以及增强 LSM 程序的 IMA(Integrity Measurement Architecture)互操作等特性,进一步完善了 KPROBE、XDP、LSM 等类型 eBPF 程序的功能特性。
Linux 5.19 为 eBPF 添加动态指针和类型指针的支持,增强了内存访问的安全性。同时,libbpf 中新增的 USDT(User Statically-Defined Tracing)探针也完善了对用户空间自定义探针的支持。
Linux 6.0 为 eBPF 添加了类型匹配、64 位枚举、可睡眠用户探针等特性,并提升了循环的性能。
Linux 6.1 为 eBPF 添加了 BPF 内存分配器、用户空间环形缓冲区映射、通过 panic() 转存内存状态以及 PKCS#7 签名验证等特性,丰富了内存特性的同时增强了安全性。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

2022 年,eBPF 技术在 Linux 内核中迎来了多个版本的更新,引入了布隆过滤映射、CO-RE、动态指针和类型指针的支持等新特性,进一步完善了 eBPF 的功能特性。同时,eBPF 技术在开源社区和商业公司中得到广泛应用,例如 Cilium 项目在云原生领域取得了突飞猛进的发展,而其他项目也借助 eBPF 实现了性能监控、TLS 加密明文捕获、调试和剖析 Kubernetes 集群等功能。然而,随着 eBPF 技术的大量应用,也暴露出了安全隐患,需要及时关注和防范。 2022 年,eBPF 技术在 Linux 内核中迎来了多个版本的更新,引入了布隆过滤映射、CO-RE、动态指针和类型指针的支持等新特性,进一步完善了 eBPF 的功能特性。同时,eBPF 技术在开源社区和商业公司中得到广泛应用,例如 Cilium 项目在云原生领域取得了突飞猛进的发展,而其他项目也借助 eBPF 实现了性能监控、TLS 加密明文捕获、调试和剖析 Kubernetes 集群等功能。然而,随着 eBPF 技术的大量应用,也暴露出了安全隐患,需要及时关注和防范。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《eBPF 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 小胖子
    怎么不更新了

    编辑回复: 3月会更新哦~按季度更新!

    2023-02-22归属地:湖南
  • 🐮
    倪老师,请教个问题啊,目前 刚开始了解ebpf,个人感觉 这个还是很难入门,没有系统性说明文档,很多基本的东西都没有说明,如使用kprobes时,内核示例代码入参只有struct pt_regs *regs,而我看你讲的例子里却有其它参数,这块好像没有找到文档明确相关规则;还有一个问题,如果单纯内核探测的话,使用内核自带的kprobe和通过ebpf使用kprobe,我怎么感觉直接使用kprobe更方便啊,直接加载驱动即可,而ebpf还要搭建一整套流程,至少我理解目前 应该是主要在x86上使用,如果我想在arm上使用,是不是不太方便,那ebpf和kprobe优势在那呢?

    作者回复: pt_regs是Linux内核通用寄存器和函数参数寄存器的一个数据结构,所以可以从这个寄存器里面去读取参数。BCC的文档有一个kprobe的简单文档 https://github.com/iovisor/bcc/blob/master/docs/reference_guide.md#1-kprobes。 我理解你说的直接使用kprobe是指用ftrace?使用eBPF的一个好处是它是可以编程的,你可以自定义内核态跟踪和用户态处理的逻辑,进而很其他的用户态系统集成到一起。

    2023-02-08归属地:陕西
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部