需求
当c++程序需要优化运行速度,或者需要降低计算负载时,我们需要借助工具来进行分析哪个函数是最耗时的,那个函数的调用次数是最多的,那么gperftools将是不错的选择
gperftools
gperftools是谷歌开源的一款用来进行性能分析的工具。我们要善于借助工具,同时要相信工具。
安装方法
# 从github下载gperftools源码并解压
git clone https://github.com/gperftools/gperftools.git
cd gperftools
./autogen.sh
./configure
make -j
sudo make install
使用方法
使用方法有很多种,但我一般是选择在程序开头和结尾添加函数的方式
- 为程序添加头文件
#include <gperftools/profiler.h>
- 在需要的地方添加函数
ProfilerStart("test.prof") //名字可以随便起,后缀不要改
******
//gperftools会记录中间程序的运行状态
******
ProfilerStop();
- 修改原有程序 CMakeLists.txt
target_link_libraries(${PROJECT_NAME} profiler) //在原有程序中链接profiler即可
结果分析
- 在加入gperftools后正常运行程序,会出现名为 test.prof 的文件,该文件记录了程序段的运行及函数调用情况
- 这时可以使用一下命令来查看结果
./可执行程序 test.prof --text
这会以文本形式在命令行中显示结果
执行 pprof ./可执行程序 test.prof --pdf > test.pdf
则会从test.prof来生成一个名为test.pdf的pdf文件
- 通过对pdf文件各个函数节点的分析,我们可以清晰的看到函数调用流程以及各函数在程序运行过程中的cpu运行时。在寻找问题节点时可以按照pdf的统计结果来进行排查,对上游函数调用进行优化。