2 个版本
0.1.1 | 2021 年 10 月 1 日 |
---|---|
0.1.0 | 2021 年 7 月 28 日 |
#184 在 性能分析 中
824 星 & 28 关注者
2KB
58 行
与 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许可证版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交给作品中的任何贡献,都将根据上述方式双许可,不附加任何额外的条款或条件。
依赖关系
~5–14MB
~152K SLoC