【问题标题】:lost hot functions from gprof output从 gprof 输出中丢失热功能
【发布时间】:2013-08-14 09:18:04
【问题描述】:

我的 gprof 在 linux 系统上运行良好。我正在获取样本以及一些呼叫计数信息。所以我在一些函数中添加了 属性 ((hot))。现在它们已经从 gprof 示例输出中消失了,只有我的非热函数被“采样”。热门功能仍然出现在呼叫计数信息中。我该如何解决这个问题?

我怀疑发生了两件事之一。 gprof 过滤它认为是相关地址的内容,并且热函数现在超出此范围,因为它们现在位于 .text.hot 部分中。或者,不知何故,热函数的调试数据存在一些混乱,因此 gprof 忽略了它们。

【问题讨论】:

  • 您查看过汇编输出(gcc 选项 -S)吗? text.hot 部分中的调试信息是否有所不同或缺失?
  • 我尝试在 Fedora 19 中使用普通的 gcc 工具链来重现这一点,并且 attribute((hot)) 不会以任何方式改变 gprof 行为。您能否发布工具链的详细信息以及用于编译程序的标志?

标签: linux gcc profiling gprof


【解决方案1】:

attribute((hot)) 也使得函数更有可能被内联,至少在同一个源文件中。只有当函数的非内联版本被调用(可能来自不同的模块)时,调用计数才会增加。这些函数不会出现在示例中,因为分析器只知道调用站点。

您应该能够通过检查呼叫计数来检测是否发生了这种情况。如果使用 attribute((hot)) 时它们要低得多,则内联将是原因。

【讨论】:

  • 感谢这个想法。我查看了地图文件,可以在 .text.hot 部分看到实例。我还有一个工具可以显示热门“线条”。如果函数被内联,它们将从“热函数”列表中消失,但这些行仍然很热。所以看起来函数的统计数据完全缺失。我还可以深入研究“函数”并经常找到属于内联函数的代码“行”。这没有发生。统计数据中缺少样本。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2018-05-08
  • 1970-01-01
  • 2016-08-16
  • 2011-02-23
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多