下载及解压
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.xz
tar -xf linux-5.10.tar.xz
cd linux-5.10/tools/perf
在 linux-5.10/tools/perf
目录中执行以下命令编译 perf
工具,这会在当前目录生成一个可执行的 perf
文件.
make
安装完成后,使用以下命令确认安装是否成功
./perf --version
如果成功,添加 perf
到你的 PATH
export PATH=$PATH:/path/to/perf
使用以下命令检查
which perf
为了使 perf
能够正确分析代码,建议在编译代码时添加调试信息(-g
)和适当的优化选项,这将生成带有调试符号的可执行文件 your_program.
gcc -g -O2 -o your_program your_program.c
使用 perf
来收集性能数据。一般的命令格式如下,这条命令会运行你的程序 your_program
并记录所有性能相关的事件,结果会保存到 perf.data
文件中。
perf record -o perf.data ./your_program
程序运行结束后,可以使用以下命令来查看性能分析结果
perf report -i perf.data
二、生成火焰图(集群中大概率因为权限问题没办法生成火焰图)
1.下载
使用 git
来克隆 FlameGraph 的 GitHub 仓库:
git clone https://github.com/brendangregg/FlameGraph.git
2.确认 stackcollapse-perf.pl
脚本的位置
克隆完成后,进入 FlameGraph
目录并确认 stackcollapse-perf.pl
文件存在,如果你能看到 stackcollapse-perf.pl
文件,那么你已经成功下载了脚本。
cd FlameGraph
ls -l stackcollapse-perf.pl
3.解决路径问题
建议你将 FlameGraph
目录添加到你的 PATH
中。你可以编辑 ~/.bashrc
或 ~/.bash_profile
:
export PATH=$PATH:/path/to/FlameGraph
source ~/.bashrc
4. 生成性能数据
运行你的程序并使用 perf
记录性能数据:(这一步在集群中,节点用户无法实现,因为有权限限制,所以后续工作也就不能完成)。这条命令会记录程序运行期间的性能数据,并保存到 perf.data
文件中。-F 99
表示每秒钟采样 99 次,-a
表示全系统跟踪,-g
表示记录调用栈。
perf record -F 99 -a -g -- ./your_program
5.生成原始脚本文件
使用 perf script
将 perf.data
转换为文本格式的脚本文件:
perf script > out.perf
6.生成火焰图的折叠数据
使用 FlameGraph
工具中的 stackcollapse-perf.pl
脚本生成火焰图所需的折叠数据:
./FlameGraph/stackcollapse-perf.pl out.perf > out.folded
7.生成火焰图
最后,使用 FlameGraph
工具生成火焰图:
./FlameGraph/flamegraph.pl out.folded > flamegraph.svg
分析火焰图
打开生成的 flamegraph.svg
文件,你可以看到不同函数调用所消耗的 CPU 时间,以火焰形状展示,越高的区域代表调用栈越深,越宽的区域代表消耗的时间越多。