linux:有没有啥“gprof”可以做而“perf”不能做的工作?需要澄清

Posted

技术标签:

【中文标题】linux:有没有啥“gprof”可以做而“perf”不能做的工作?需要澄清【英文标题】:linux: is there any job that "gprof" can do while "perf" cannot? Need clarificationlinux:有没有什么“gprof”可以做而“perf”不能做的工作?需要澄清 【发布时间】:2017-03-21 08:49:40 【问题描述】:

这两个工具都是 linux 性能和分析探测工具。我发现“perf”看起来更强大,因为它可以追溯到内核调用级别。所以我的问题是,有了“perf”,是否还需要学习和保持“gprof”/

我的意思是,有没有只有 gprof 可以完成的工作,而 perf 不能很好地工作?

【问题讨论】:

它们是完全不同的动物。 gprof 自 1982 年以来一直存在。它简单而古老,I think it should be retired。 perf 是一个具有多种选择的现代工具。如果它能让你看到它的堆栈(调用链)样本的随机选择,它甚至可以和this 一样好。 【参考方案1】:

gprof(针对不同操作系统的几种实现)与程序检测(需要重新编译)和对间隔定时器信号(setitimer,高达 0.1-1 kHz)的统计 PC 采样一起使用。通过检测,它可以获取有关函数之间的调用和函数调用计数的信息。检查https://en.wikipedia.org/wiki/Gprof:

Gprof 是 Unix 应用程序的性能分析工具。它使用仪器和采样的混合体[1],并作为旧“prof”工具的扩展版本创建。与 prof 不同,gprof 能够进行有限的调用图收集和打印。[1][2]

perf 是仅限 Linux 的现代统计分析工具。它可以在软件计时器和硬件性能计数器(如执行的指令、L1 未命中计数等)上对 PC 和调用堆栈(如果有帧指针或足够的调试信息来展开调用堆栈)进行采样;full event list by showevtinfo 是@987654323 @,在 https://***.com/a/23965237 中找到)。 perf 中还内置了其他模式:http://www.brendangregg.com/perf.html

所以,gprof 可以向您显示单个程序的确切函数调用计数,但它无法解析调用堆栈(它只是近似它)。 Linux、BSD 和许多其他 Unix 和类 Unix 操作系统中都有 gprof。 perf 仅适用于 Linux,但可以访问硬件性能监控单元并支持单程序分析和系统范围分析。

【讨论】:

以上是关于linux:有没有啥“gprof”可以做而“perf”不能做的工作?需要澄清的主要内容,如果未能解决你的问题,请参考以下文章

GNU profiler(gprof)使用

GNU profiler(gprof)使用

Linux性能调优之gprof和oprofile

如何在 Linux 中使用 gprof?

Linux c++ 性能分析工具gprof

ubuntu 和 Linux 内核啥关系?