Skip to content

Daily Study

更新: 5/26/2025 字数: 0 字 时长: 0 分钟

Daily Plan

#todo

eBPF回顾

eBPF能够在不更改内核代码的前提下,实现实时获取和修改操作系统的操作,是一种安全高效的内核可编程技术,拥有以下特性:

  • 安全:eBPF 程序必须被验证器校验通过后才能执行,且不能包含无法到达的指令;eBPF 程序不能随意调用内核函数,只能调用在 API 中定义的辅助函数;eBPF 程序栈空间最多只有 512 字节,想要更大的存储,就必须要借助映射存储。
  • 高效:借助即时编译器(JIT),且因为 eBPF 指令依然运行在内核中,无需向用户态复制数据,大大提高了事件处理的效率。

eBPF的架构: 用户态:

  1. 用户编写 eBPF 程序,可以使用 eBPF 汇编或者 eBPF 特有的 C 语言来编写。
  2. 使用 LLVM/CLang 编译器,将 eBPF 程序编译成 eBPF 字节码。
  3. 调用 bpf() 系统调用把 eBPF 字节码加载到内核

内核态:

  1. 当用户调用 bpf() 系统调用把 eBPF 字节码加载到内核时,内核先会对 eBPF 字节码进行安全验证。
  2. 使用 JIT(Just In Time)技术将 eBPF 字节编译成本地机器码(Native Code)
  3. 然后根据 eBPF 程序的功能,将 eBPF 机器码挂载到内核的不同运行路径上(如用于跟踪内核运行状态的 eBPF 程序将会挂载在 kprobes 的运行路径上)。当内核运行到这些路径时,就会触发执行相应路径上的 eBPF 机器码。

根据挂载点的功能,分为几个模块:

  1. 性能跟踪
  2. 网络优化
  3. 容器
  4. 安全

未完待续

菜就多练

本站访客数 人次 本站总访问量