DragonOS/docs/kernel/debug/profiling-kernel-with-dadk.md
LoGin e8b1db320d
chore: Bump dadk to 0.2.0 (#1058)
# 概述

把dadk版本升级到0.2.0

dadk 0.2.0能够提升编译速度,并且支持使用dadk对内核进行profiling。
新版dadk的文档: https://docs.dragonos.org.cn/p/dadk/

# 注意

这是一个breaking change,升级后,将无法使用dadk 0.2.0去编译旧的项目。如有需要,请手动降级到dadk 0.1.11:
```shell
cargo install --git  https://git.mirrors.dragonos.org.cn/DragonOS-Community/DADK --tag v0.1.11
```

# 更改列表

* chore: 把管理用户程序编译的dadk配置文件改为新格式的

* feat: 使用新版dadk来创建\挂载\卸载磁盘镜像

* chore: bump dadk min version to 0.2.0

* chore: fix ci

* chore: 更新github ci镜像到1.7

* doc: 添加文档

---------
Co-Authored-by: xuzihao <xuzihao@dragonos.org>
Signed-off-by: longjin <longjin@DragonOS.org>
2024-11-27 01:30:31 +08:00

96 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 使用DADK对内核进行性能分析
## 1. 概述
本文将教你使用DADK对DragonOS内核进行性能分析以识别和解决潜在的性能瓶颈。
### 1.1 准备工作
::: {note}
在开始之前请确保你已经安装了DADK并且已经配置好了DragonOS内核的编译环境。
:::
### 1.2 什么是火焰图?
如果你没有听说过火焰图,可以先阅读这篇文章:[《如何读懂火焰图?- 阮一峰》](https://www.ruanyifeng.com/blog/2017/09/flame-graph.html)
简单的说,火焰图是基于性能采样结果产生的 SVG 图片,用来展示 CPU 的调用栈。
![](https://web-static2.dragonos.org.cn//longjin/flame2.svg?imageSlim)
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽就表示它被抽到的次数多即执行的时间长。注意x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"plateaus就表示该函数可能存在性能问题。
颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。
## 2. 配置DragonOS内核
由于性能分析需要详尽的符号表数据,因此我们需要在编译内核时,需要进行以下配置:
`kernel/Cargo.toml`中的`[profile.release]`部分,设置以下两项:
```toml
[profile.release]
debug = true
opt-level = 1
```
这样,编译出来的内核就会包含符号表数据,方便我们进行性能分析。
## 3. 使用DADK进行性能分析
### 3.1 启动内核
首先我们需要启动DragonOS内核。
```shell
# 使用你喜欢的方式启动内核,例如:
make run
# 或者
make build && make qemu-nographic
```
### 3.2 运行你的工作负载
在启动内核后,我们需要运行一些工作负载,以便进行性能分析。
这可以是一个应用程序也可以是别的东西。甚至你可以什么都不运行只是单纯看看DragonOS内核在空闲时的调用栈情况。
### 3.3 启动DADK进行性能分析
在DragonOS项目目录下运行以下命令
```shell
dadk profile sample --format flamegraph --output flame.svg --interval 200ms --duration 20s --cpu-mask 0x1
```
上面的命令将会对DragonOS内核进行性能分析并生成一个火焰图。
详细解释:
- `--format flamegraph`:指定输出格式为火焰图。
- `--output flame.svg`:指定输出文件名为`flame.svg`
- `--interval 200ms`指定采样间隔为200ms。
- `--duration 20s`指定采样时间为20s。
- `--cpu-mask 0x1`指定采样的CPU为0号CPU。这是个按位掩码也就是说如果要采样0和1号CPU那么cpu-mask为0x3
*更多参数请参考`dadk profile sample --help`.*
::: {note}
由于采样时会暂停vCPU因此采样时间不宜过短否则会影响系统的正常运行。
:::
经过一段时间的等待,你将会得到一个`flame.svg`文件。
### 3.4 分析火焰图
使用浏览器打开`flame.svg`文件,你将会看到一个火焰图。
你可以通过点击火焰图中的某个函数,来查看它的调用栈。
**你可以右键下面的图片,在新的标签页打开,体验交互效果。**
![](https://web-static2.dragonos.org.cn//longjin/flame2.svg?imageSlim)