2 个版本
0.1.1 | 2021 年 10 月 1 日 |
---|---|
0.1.0 | 2021 年 7 月 28 日 |
#281 在 性能分析 中
824 星 & 28 关注者
310KB
8K SLoC
类似于 perf
的 Linux 采样 CPU 性能分析器
功能
- 支持 AMD64、ARM、AArch64 和 MIPS64 架构(MIPS64 需要在内核上打一个小补丁才能工作)
- 支持离线和在线堆栈跟踪反解
- 支持没有任何调试信息(没有
.debug_frame
部分)的二进制文件的分析- 使用基于
.eh_frame
的反解(这是正常 C++ 异常处理反解堆栈的方式)而不需要.eh_frame_hdr
(这取决于编译器,可能不会生成) - 使用基于
.ARM.exidx
+.ARM.extab
的反解(这是 ARM 特有的,并用于替代.eh_frame
)
- 使用基于
- 支持跨架构数据分析
- 完全架构无关的数据格式
- 内置火焰图生成
为什么我应该使用这个而不是 perf
?
如果 perf
已经适合您 - 那太好了!继续使用它。
这个项目源于对原始 perf
的几个限制,这些限制使其不适合嵌入式环境中的 CPU 性能分析。以下是一些限制
- 不支持MIPS64架构,
- 由于仅支持离线堆栈回溯,生成的CPU分析数据量较大,因此如果您存储空间有限,您可以选择以非常低的频率进行性能分析,或者进行非常短的时间;
- 不支持跨架构分析 - 如果您在ARM架构上运行
perf record
,则需要同时在ARM或QEMU下运行perf report
,并且在使用QEMU进行分析(取决于您如何编译二进制文件以及如何启动perf
)可能需要数小时; - 以及对具有有限或无调试信息的二进制文件的分析支持较差,这在大型嵌入式项目中很常见,其中调试信息甚至无法适应目标机器,或者无法轻松获得。
构建
-
安装至少Rust 1.31版本
-
构建它
$ cd cli $ cargo build --release
-
从
target/release/
获取二进制文件。
交叉编译
- 在您的
~/.cargo/config
中配置目标架构的链接器,例如。
[target.mips64-unknown-linux-gnuabi64]
linker = "/path/to/your/sdk/mips64-octeon2-linux-gnu-gcc"
rustflags = [
"-C", "link-arg=--sysroot=/path/to/your/sdk/sys-root/mips64-octeon2-linux-gnu"
]
[target.armv7-unknown-linux-gnueabihf]
linker = "/path/to/your/sdk/arm-cortexa15-linux-gnueabihf-gcc"
rustflags = [
"-C", "link-arg=--sysroot=/path/to/your/sdk/sys-root/arm-cortexa15-linux-gnueabihf"
]
-
编译,针对ARM或MIPS64
$ cargo build --release --target=mips64-unknown-linux-gnuabi64 $ cargo build --release --target=armv7-unknown-linux-gnueabihf
-
从
target/mips64-unknown-linux-gnuabi64/
或target/armv7-unknown-linux-gnueabihf/
获取二进制文件。
基本用法
通过PID分析正在运行的进程
$ cargo run record -p $PID_OF_YOUR_PROCESS -o datafile
通过名称分析进程,如果尚未运行则等待
$ cargo run record -P cpu-hungry-program -w -o datafile
从收集的数据生成CPU火焰图
$ cargo run flamegraph datafile > flame.svg
如果您在构建目录之外运行分析器,请将cargo run
替换为可执行文件的路径。
许可证
许可如下之一
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您提交的任何有意包含在作品中的贡献,都应作为上述双重许可,没有附加条款或条件。
依赖项
约6MB
约117K SLoC