三天高效入门 eBPF的开发

2023-02-15 15:28:10 浏览数 (1)

入门(5-7h)

  • Google 或者其他搜索引擎查找:eBPF
  • 询问 ChatGPT 之类的东西:eBPF 是什么?

推荐:

  • 阅读 ebpf 简介:https://ebpf.io/(30min)
  • 简要了解一下 ebpf 内核相关文档:https://prototype-kernel.readthedocs.io/en/latest/bpf/ (知道有问题去哪里查询: 30min)
  • 阅读 ebpf 中文入门指南:https://www.modb.pro/db/391570(1h)
  • 有大量的参考资料:https://github.com/zoidbergwill/awesome-ebpf(2-3h)
  • 可以选自己感兴趣的 PPT 翻一翻:https://github.com/gojue/ebpf-slide(1-2h)

回答三个问题:

  1. 了解 eBPF 是什么东西?为啥要有这个玩意,不能用内核模块?
  2. 它有什么功能?能在 Linux 内核里面完成哪些事情?有哪些 eBPF 程序的类型和 helper(不需要知道全部,但是需要知道去哪里找)?
  3. 能拿来做什么?比如说在哪些场景中进行运用?网络、安全、可观测性?

了解如何开发 eBPF 程序(10-15h)

了解并尝试一下 eBPF 开发框架:

  • BCC 开发各类小工具的例子:https://github.com/iovisor/bcc/blob/master/docs/tutorial_bcc_python_developer.md(跑一遍:3-4h)
  • libbpf 的一些例子: https://github.com/libbpf/libbpf-bootstrap(选感兴趣的运行一下,并阅读一下源代码:2h)
  • 基于 libbpf 和 eunomia-bpf 的教程: https://github.com/eunomia-bpf/bpf-developer-tutorial(阅读 1-10 的部分: 3-4h)

其他开发框架:Go 语言或者 Rust 语言,请自行搜索并且尝试(0-2h)

有任何问题或者想了解的东西,不管是不是和本项目相关,都可以在本项目的 discussions 里面开始讨论。

回答一些问题,并且进行一些尝试(2-5h):

  1. 如何开发一个最简单的 eBPF 程序?
  2. 如何用 eBPF 追踪一个内核功能或函数?有很多种方法,举出对应的代码;
  3. 有哪些方案能通过用户态和内核态通信?如何从用户态向内核态传送信息?如何从内核态向用户态传递信息?举出代码示例;
  4. 编写一个你自己的 eBPF 程序,实现一个功能;
  5. eBPF 程序的整个生命周期里面,分别在用户态和内核态做了哪些事情?

0 人点赞