linux:有什么工作是"gprof"可以做而"perf"不能做的吗?需要澄清

linux: is there any job that "gprof" can do while "perf" cannot? Need clarification

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

吗?

我的意思是,有什么工作只能用 gprof 才能完成,而 perf 不能很好地工作吗?

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

Gprof is a performance analysis tool for Unix applications. It uses a hybrid of instrumentation and sampling[1] and was created as extended version of the older "prof" tool. Unlike prof, gprof is capable of limited call graph collecting and printing.[1][2]

perf 是 Linux 唯一的现代统计分析工具。它可以在软件定时器和硬件性能计数器(如执行的指令、L1 未命中计数等许多其他方面)上对 PC 和调用堆栈(如果有帧指针或足够的调试信息来展开调用堆栈)进行采样;full event list by showevtinfo is http://www.bnikolic.co.uk/blog/hpc-prof-events.html, found in ). There are other modes built into perf too: http://www.brendangregg.com/perf.html

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