我已开始使用Kcachegrind
进行效果分析。但我不理解GUI
和输出图。
例如,此调用图
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
是什么?
答案 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%。也就是说,在所选函数的上方,函数的直接父项中的百分比总是累加到该函数的确切百分比,除非由于低于可见性阈值而使可视化中的某个功能停止 (见上下文菜单)。