mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-02-09 21:25:24 +08:00
teach chatgpt for perf event
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
- [1.3.2. 指令编码格式](#132-指令编码格式)
|
||||
- [1.4. 本节参考文章](#14-本节参考文章)
|
||||
- [2. 如何使用eBPF编程](#2-如何使用ebpf编程)
|
||||
- [编写 eBPF 程序](#编写-ebpf-程序)
|
||||
- [2.1. BCC](#21-bcc)
|
||||
- [2.2. libbpf-bootstrap](#22-libbpf-bootstrap)
|
||||
- [2.3 eunomia-bpf](#23-eunomia-bpf)
|
||||
@@ -90,7 +91,7 @@ llvm于2015年推出了可以将由高级语言编写的代码编译为eBPF字
|
||||
的函数以及一些其他的关键函数。在Linux的源码包的`samples/bpf/`目录下,有大量Linux
|
||||
提供的基于`libbpf`的eBPF样例代码。
|
||||
|
||||
一个典型的基于`libbpf`的eBPF程序具有`*_kern.c`和`*_user.c`两个文件,
|
||||
一个典型的基于 `libbpf` 的eBPF程序具有`*_kern.c`和`*_user.c`两个文件,
|
||||
`*_kern.c`中书写在内核中的挂载点以及处理函数,`*_user.c`中书写用户态代码,
|
||||
完成内核态代码注入以及与用户交互的各种任务。 更为详细的教程可以参考[该视频](https://www.bilibili.com/video/BV1f54y1h74r?spm_id_from=333.999.0.0)
|
||||
然而由于该方法仍然较难理解且入门存在一定的难度,因此现阶段的eBPF程序开发大多基于一些工具,比如:
|
||||
@@ -99,10 +100,22 @@ llvm于2015年推出了可以将由高级语言编写的代码编译为eBPF字
|
||||
- BPFtrace
|
||||
- libbpf-bootstrap
|
||||
|
||||
以及还有比较新的工具,例如 `eunomia-bpf` 将 CO-RE eBPF 功能作为服务运行,包含一个工具链和一个运行时,主要功能包括:
|
||||
以及还有比较新的工具,例如 `eunomia-bpf`.
|
||||
|
||||
- 不需要再为每个 eBPF 工具编写用户态代码框架:大多数情况下只需要编写内核态应用程序,即可实现正确加载运行 eBPF 程序;同时所需编写的内核态代码和 libbpf 完全兼容,可轻松实现迁移;
|
||||
- 提供基于 async Rust 的 Prometheus 或 OpenTelemetry 自定义可观测性数据收集器,通常仅占用不到1%的资源开销,编写内核态代码和 yaml 配置文件即可实现 eBPF 信息可视化,编译后可在其他机器上通过 API 请求直接部署;
|
||||
## 编写 eBPF 程序
|
||||
|
||||
eBPF 程序由内核态部分和用户态部分构成。内核态部分包含程序的实际逻辑,用户态部分负责加载和管理内核态部分。使用 eunomia-bpf 开发工具,只需编写内核态部分的代码。
|
||||
|
||||
内核态部分的代码需要符合 eBPF 的语法和指令集。eBPF 程序主要由若干个函数组成,每个函数都有其特定的作用。可以使用的函数类型包括:
|
||||
|
||||
- kprobe:插探函数,在指定的内核函数前或后执行。
|
||||
- tracepoint:跟踪点函数,在指定的内核跟踪点处执行。
|
||||
- raw_tracepoint:原始跟踪点函数,在指定的内核原始跟踪点处执行。
|
||||
- xdp:网络数据处理函数,拦截和处理网络数据包。
|
||||
- perf_event:性能事件函数,用于处理内核性能事件。
|
||||
- kretprobe:函数返回插探函数,在指定的内核函数返回时执行。
|
||||
- tracepoint_return:跟踪点函数返回,在指定的内核跟踪点返回时执行。
|
||||
- raw_tracepoint_return:原始跟踪点函数返回,在指定的内核原始跟踪
|
||||
|
||||
### 2.1. BCC
|
||||
|
||||
@@ -156,4 +169,8 @@ eunomia-bpf 由一个编译工具链和一个运行时库组成, 对比传统的
|
||||
> - eunomia-bpf 项目 Github 地址: <https://github.com/eunomia-bpf/eunomia-bpf>
|
||||
> - gitee 镜像: <https://gitee.com/anolis/eunomia>
|
||||
|
||||
## 参考资料
|
||||
## 参考资料
|
||||
|
||||
- eBPF 介绍:https://ebpf.io/
|
||||
- BPF Compiler Collection (BCC):https://github.com/iovisor/bcc
|
||||
- eunomia-bpf:https://github.com/eunomia-bpf/eunomia-bpf
|
||||
Reference in New Issue
Block a user