1. 记录数据
perf record -e cpu-clock -g --call-graph dwarf $NEMU_HOME/build/riscv32-nemu-interpreter -b ./build//microbench-riscv32-nemu.bin
-e
指定要监控的性能时间,cpu-clock
表示监控CPU占用时间。-g
启用调用堆栈。--call-graph dwarf
指定调用图的生成方式。$NEMU_HOME/build/riscv32-nemu-interpreter -b ./build//microbench-riscv32-nemu.bin
为要分析的程序及其参数。
执行完上述命令后,当前文件夹下会生成perf.data
文件。
2. 查看数据
perf report
从上图的"self"列中可以看出中可以看出,decode_exec.isa.0
占用了较多的时间,.isra
:这是编译器优化过程中的一个标识,具体来说,指的是 Interprocedural Scalar Replacement of Aggregates(跨过程标量替换聚合体)。
使用如下命令查看具体代码占用的时间:
perf annotate decode_exec.isra.0
从上面还是可以能看出,主要是访存相关的指令占用时间较长。
3. 生成可视化火焰图
生成可视化的火焰图需要安装flamegraph.
perf script -i perf.data > perf.unfold
stackcollapse-perf.pl perf.unfold > perf.folded
flamegraph.pl perf.folded > perf.svg
通过火焰图可以看出程序运行时函数的占用时间,可针对进行优化。
4. 封装为简易脚本
#!/usr/bin/bash
perf record -e cpu-clock -g --call-graph dwarf "$@" && \
echo "Generate Flame Graph..." && \
perf script -i perf.data | stackcollapse-perf.pl | flamegraph.pl > perf.svg && \
xdg-open perf.svg
最新回复