eBPF笔记

什么是eBPF

eBPF(extend Berkeley Packet Filter),让Kernel内核实现可编程化。

为什么需要eBPF

ebpf_overview.png

可以把ebpf程序放到内核中动态的执行,实际是一个sandbox环境,不会改变内核本身。

内核中的验证器(图verification)会检验ebpf程序是否安全。

程序能运行且不需要重启。

用户空间(User Space)和内核空间(Kernel Space)

1.用户空间(User Space)是所有应用程序运行的地方

2.内核空间(Kernel Space)位于 用户空间(User Space)和 物理硬件(Physical Hardware)之间。

用户空间中的应用程序无法直接访问硬件,它们会向内核发出系统调用,然后由内核再访问硬件。

kernel_space.png

eBPF工作原理

ebpf工作原理.png

  1. 基于事件驱动,在特定事件发生时触发Hooks,调用eBPF程序来获取数据。
  2. Hooks可以在用户空间和内核空间,也可以是静态和动态的。
  3. 静态的Hooks一般是内核开发人员预定义的一些事件。
  4. 动态的Hooks,比如kprobesuprobes是最常用的。

eBPF程序可挂载的事件

eBPF程序可挂载的事件