9

我已经开始使用Kcachegrind性能分析。但我不明白GUI和输出图。

例如对于这个调用图

在此处输入图像描述 SignatureIterator::iterate_parameters()我不明白 9.25% 指的是什么?SignatureIterator::iterate_parameters()5 198x 表示调用 了多少次SignatureIterator::parse_type()?100% in 是什么意思Symbol::byte_at(int) const?什么是ELF Object?

注意:在官方文档http://kcachegrind.sourceforge.net/html/CallGraph.html中,但还是不明白是什么the caller distance to the function

4

1 回答 1

13

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()自身的代码正在运行。

在所选功能的上方,它可能有点棘手。例如,9.25% forSignatureIterator::iterate_parameters()表示在这段时间内Symbol::byte_at()处于活动状态,其中 9.25% 的时间是从 间接调用的SignatureIterator::iterate_parameters()。同样,Symbol::byte_at()它有 11.27% 的时间直接从SignatureIterator::parse_type(). 也就是说,在所选函数之上,函数的直接父级中的百分比始终加起来为该函数的确切百分比,除非函数由于低于可见性阈值而从可视化中退出(请参阅上下文菜单)。

于 2015-06-15T23:05:26.060 回答