解释 gprof 结果和粒度

Posted

技术标签:

【中文标题】解释 gprof 结果和粒度【英文标题】:Interpreting gprof result and granularity 【发布时间】:2014-01-04 11:58:42 【问题描述】:

我第一次使用 gprof 分析 C 程序。以下行出现在我使用生成的报告中;

 $  gprof test_gprof gmon.out > analysis.txt

在平面轮廓中

每个样本计为 0.01 秒。

这是时间的最大分辨率吗?

在调用图中:

粒度:每个样本命中覆盖 4 个字节,占 0.13 的 7.69% 秒

这里的 4 个字节到底是什么?它在说什么时间?

【问题讨论】:

你读过这个:ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_chapter/… 吗? 【参考方案1】:

请阅读此manual 的第 5.1 和 5.2 章。您也可以在 CentOS 上使用以下命令阅读本手册:

$ info gprof

在平面轮廓中,

每个样本计为 0.01 秒。

表示采样周期为 100Hz,它不受 gprof 本身控制(查看此page 和此one 了解更多详细信息)。所以0.01 seconds理论上并不是时间上的最大分辨率。

至于调用图,根据 Oracle 的 doc,

“4 字节”表示解析为单个指令。 “14.74 秒的 0.07%”表示每个样本,代表十毫秒的 CPU 时间,占运行的 0.07%。

【讨论】:

以上是关于解释 gprof 结果和粒度的主要内容,如果未能解决你的问题,请参考以下文章

C++ main 只使用约 20% 的时间说 gprof

当我用程序编译它时 -Wall 标志有啥作用?

gcc -Ofast -pg 错误的 gprof 结果

GPROF 平面轮廓空结果

从 gprof 结果中排除函数

Gprof 结果:啥是“alloc_mmap”?