eBPF 核心技术与实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
1006 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
01|技术概览:eBPF 的发展历程及工作原理
03 | 初窥门径:开发并运行你的第一个 eBPF 程序
04 | 运行原理:eBPF 是一个新的虚拟机吗?
课程目录
已更新 8 讲/共 16 讲
开篇词 (1讲)
开篇词 | 想要洞悉系统底层的黑盒?先掌握 eBPF!
学习准备篇 (2讲)
01|技术概览:eBPF 的发展历程及工作原理
02 | 先利其器:如何高效学习 eBPF?
基础入门篇 (4讲)
03 | 初窥门径:开发并运行你的第一个 eBPF 程序
04 | 运行原理:eBPF 是一个新的虚拟机吗?
05 | 编程接口:eBPF 程序是怎么跟内核进行交互的?
06 | 事件触发:各类 eBPF 程序的触发机制及其应用场景
实战进阶篇 (1讲)
07 | 内核跟踪(上):如何查询内核中的跟踪点?
eBPF 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册
开通超级会员可免费学习本课程,还可解锁海量内容免费学特权。

06 | 事件触发:各类 eBPF 程序的触发机制及其应用场景

你好,我是倪朋飞。
上一讲,我带你一起梳理了 eBPF 程序跟内核交互的基本方法。一个完整的 eBPF 程序通常包含用户态和内核态两部分:用户态程序通过 BPF 系统调用,完成 eBPF 程序的加载、事件挂载以及映射创建和更新,而内核态中的 eBPF 程序则需要通过 BPF 辅助函数完成所需的任务。
在上一讲中我也提到,并不是所有的辅助函数都可以在 eBPF 程序中随意使用,不同类型的 eBPF 程序所支持的辅助函数是不同的。那么,eBPF 程序都有哪些类型,而不同类型的 eBPF 程序又有哪些独特的应用场景呢?今天,我就带你一起来看看。

eBPF 程序可以分成几类?

eBPF 程序类型决定了一个 eBPF 程序可以挂载的事件类型和事件参数,这也就意味着,内核中不同事件会触发不同类型的 eBPF 程序。
根据内核头文件 include/uapi/linux/bpf.hbpf_prog_type 的定义,Linux 内核 v5.13 已经支持 30 种不同类型的 eBPF 程序(注意, BPF_PROG_TYPE_UNSPEC表示未定义):
enum bpf_prog_type {
BPF_PROG_TYPE_UNSPEC, /* Reserve 0 as invalid program type */
BPF_PROG_TYPE_SOCKET_FILTER,
BPF_PROG_TYPE_KPROBE,
BPF_PROG_TYPE_SCHED_CLS,
BPF_PROG_TYPE_SCHED_ACT,
BPF_PROG_TYPE_TRACEPOINT,
BPF_PROG_TYPE_XDP,
BPF_PROG_TYPE_PERF_EVENT,
BPF_PROG_TYPE_CGROUP_SKB,
BPF_PROG_TYPE_CGROUP_SOCK,
BPF_PROG_TYPE_LWT_IN,
BPF_PROG_TYPE_LWT_OUT,
BPF_PROG_TYPE_LWT_XMIT,
BPF_PROG_TYPE_SOCK_OPS,
BPF_PROG_TYPE_SK_SKB,
BPF_PROG_TYPE_CGROUP_DEVICE,
BPF_PROG_TYPE_SK_MSG,
BPF_PROG_TYPE_RAW_TRACEPOINT,
BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
BPF_PROG_TYPE_LWT_SEG6LOCAL,
BPF_PROG_TYPE_LIRC_MODE2,
BPF_PROG_TYPE_SK_REUSEPORT,
BPF_PROG_TYPE_FLOW_DISSECTOR,
BPF_PROG_TYPE_CGROUP_SYSCTL,
BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE,
BPF_PROG_TYPE_CGROUP_SOCKOPT,
BPF_PROG_TYPE_TRACING,
BPF_PROG_TYPE_STRUCT_OPS,
BPF_PROG_TYPE_EXT,
BPF_PROG_TYPE_LSM,
BPF_PROG_TYPE_SK_LOOKUP,
};
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
01|技术概览:eBPF 的发展历程及工作原理
03 | 初窥门径:开发并运行你的第一个 eBPF 程序
04 | 运行原理:eBPF 是一个新的虚拟机吗?
05 | 编程接口:eBPF 程序是怎么跟内核进行交互的?
06 | 事件触发:各类 eBPF 程序的触发机制及其应用场景
07 | 内核跟踪(上):如何查询内核中的跟踪点?
开通超级会员免费畅看本课程
开通会员
该文章仅可免费阅读部分内容,如需阅读完整文章,请开通超级会员或单独购买本课程。
登录 后留言

精选留言(2)

  • 不了峰
    打卡

    作者回复: 加油!

    2022-01-28
    1
  • YF
    你是怎么理解 eBPF 程序类型的呢?

    eBPF 对应与内核的事件类型,犹如订阅同类消息事件,内核发现对应的事件,则通知订阅者处理。
    2022-01-30
收起评论
2
返回
顶部