如何解读Kcachegrind图?

时间:2015-06-08 15:48:34

标签: kcachegrind

我已开始使用Kcachegrind进行效果分析。但我不理解GUI和输出图。

例如,此调用图

enter image description here SignatureIterator::iterate_parameters()我不明白9.25%指的是什么? 5 198x表示SignatureIterator::iterate_parameters()调用SignatureIterator::parse_type()多少次? Symbol::byte_at(int) const中100%的含义是什么? 什么是ELF Object

注意:在官方文档http://kcachegrind.sourceforge.net/html/CallGraph.html中,但仍然不了解the caller distance to the function是什么?

1 个答案:

答案 0 :(得分:9)

KCachegrind中的所有可视化都围绕当前选定的函数,此处为Symbol::byte_at()。通常,所选功能的百分比数量与总成本(运行时间/周期)相关地显示。但是,如果启用模式/工具按钮“相对于父级”,则调用图中的百分比数字会“缩小”以显示所选功能的100%,以便更容易查看其他功能所花费的成本比率,相对于选定的一个。

让我们假设成本(即在KCachegrind中选择的事件类型)是时间(以CPU周期或毫秒为单位 - 与百分比无关)。这使得它可能更容易理解。

调用图中的百分比始终显示某些给定函数所花费的时间,而所选函数(Symbol::byte_at活动,即。在程序运行期间,可以在调用堆栈上找到这两个函数的时间。这适用于被叫方向(向下Symbol::byte_at())和来电方向(向上Symbol::byte_at())。

向下,这更容易理解:当Symbol::byte_at()处于活动状态时,24.14%的处理器实际上是从Symbol::base()执行代码。另一次(100% - 24.14%),Symbol::byte_at()本身的代码正在运行。

所选功能的向上,可能有点棘手。 例如,SignatureIterator::iterate_parameters()的9.25%表示在Symbol::byte_at()处于活动状态期间,其中9.25%是从SignatureIterator::iterate_parameters()间接调用的。同样,Symbol::byte_at()被称为直接从SignatureIterator::parse_type()运行的时间的11.27%。也就是说,在所选函数的上方,函数的直接父项中的百分比总是累加到该函数的确切百分比,除非由于低于可见性阈值而使可视化中的某个功能停止 (见上下文菜单)。