gperftools快速上手
最近在做后处理功能的开发,由于开发有计算效率上的要求,所以学习了一下怎么对程序性能进行分析。这里使用gperftools是因为它能统计部分代码的效率。相比与其他性能分析工具,gperftools有Profiling速度快,灵活性较高的优点。
主流的热点分析工具,分别是GNU gprof、Valgrind和Google perftools,三款工具的主要特点如下表:
工具 | 使用命令 | 是否需要重新编译 | Profiling速度 | 是否支持多线程热点分析 | 是否支持链接库热点分析 |
---|---|---|---|---|---|
GNU gprof | ./test; gprof ./test ./gmon.out | 是 | 慢 | 否 | 否 |
Valgrind | Valgrind –tool=callgrind ./test | 否 | 非常慢 | 是 | 是 |
Google perftools | LD_PRELOAD=/usr/lib/libprofiler.so CPUPROFILE=./test.prof ./test | 否 | 快 | 是 | 是 |
Ubuntu系统的安装
1 | # 克隆代码 |
在.bashrc
文件中添加环境变量
gperftools进行时间效率分析
非侵入式
gperftools允许不改变程序分析,用以下命令运行即可
1 | LD_PRELOAD=/usr/lib/libprofiler.so.0 CPUPROFILE=./main.prof ./main |
LD_PRELOAD
:gperftools动态链接库的绝对路径,不同的版本变量名可能不同
CPUPROFILE
:输出报告的文件名
侵入式
如果只需要统计部分代码,例如想统计后处理相关代码的性能,可以通过函数来调用gperftools。
1 |
|
编译和链接时需要加-lprofiler
选项,运行该段代码会产生名为test.prof
的报告
gperftools结果分析
可以以文本形式展示性能报告:
1 | google-pprof --text [程序名] [报告文件名] |
gperftools支持动态链接库的分析,因此程序名也可以替换成动态链接库名。
1 | Total: 40 samples |
Total: 40 samples 表示采集到40个样本,默认设置下gperftools采样时间为10 ms
。可以通过环境变量CPUPROFILE_FREQUENCY
设置采样频率,默认是100次采样。
- 结果说明,数据每一列意义:
- Number of profiling samples in this function 分析样本数量
- Percentage of profiling samples in this function 分析样本百分比,也就是该函数在总时间的占比
- Percentage of profiling samples in the functions printed so far 累计占比,该函数的时间占比加上之前所有函数的占比
- Number of profiling samples in this function and its callees 分析样本数量
- Percentage of profiling samples in this function and its callees 分析样本百分比(包含其他函数调用)
- Function name 函数名
gperftools快速上手