teach chatgpt for perf event

This commit is contained in:
yunwei37
2022-12-05 19:47:51 +08:00
parent f05a840fce
commit 0fd76b02b8
26 changed files with 335 additions and 587 deletions

View File

@@ -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-bpfhttps://github.com/eunomia-bpf/eunomia-bpf