解释 callgrind 数据

Posted

技术标签:

【中文标题】解释 callgrind 数据【英文标题】:Interpreting callgrind data 【发布时间】:2012-02-14 15:00:38 【问题描述】:

我的应用需要一个动态调用图。我使用callgrind 工具(valgrind 套件)运行它并得到callgrind.out.xxxxx 文件。现在,我想对这些数据进行图形表示。 KCacheGrind 对我没有多大帮助,因为它绘制了图形的有限部分(绘制了 ~50 个函数而不是 ~1500 个配置文件,我不知道如何解决这个问题)。如何获得将绘制所有函数的图形图像?

【问题讨论】:

callgrind.out 是否包含图中缺失的数据?此外,如果您按“自我”排序,是否还有相关的时间/指令用于未列出的功能?我不记得遗漏了相关部分的案例。 是的,callgrind.out 包含我需要的所有数据(包括图中缺少的函数),并且图中未列出的大多数函数都花费了相关的时间/指令。不知道为什么KCacheGrind 只画了一部分。 UPD:如果我在函数列表中选择我想要的函数(在默认 KCacheGrind 布局中放置在左侧),则重新绘制图形以显示此函数,但仍然缺少其他函数。我需要一次整个图表。提前致谢。 【参考方案1】:

使用以下命令使用 gprof2dot 生成 graph.png

$ ./gprof2dot.py --format=callgrind --output=out.dot /path/to/callgrind.out
$ dot -Tpng out.dot -o graph.png

【讨论】:

【参考方案2】:

好的,我找到了方法。生成的callgrind.out 文件可以使用gprof2dot 转换为dot 文件(是的,这个工具也可以解析callgrind 文件)。然后你可以使用dot -T<type> dotfile.dot -o graphfile.<type>得到图形图像

【讨论】:

有趣。生成的图对 1500 个函数是否可读? 交易是,实际上我需要比较来自两个不同版本软件的两个图表,所以没有阅读/理解整个图表的目的,我只需要一些路径,我知道我应该在哪里寻找他们。 OTOH,在我的Core i7-2600 3.4GHz / 8 Gb DDR3 上生成png 图像大约需要5 分钟,生成的文件大小为23 MBytes。并非所有图像查看器都可以快速正确地处理它(完美的压力测试 IMO :)) 我们应该实际输入-T<type> 吗?或者我们用什么替换<type> @nmz787 是的,您需要指定类型。例如dot -Tsvg dotfile.dot -o graphfile.svg。您还可以使用 pdf 或 png 等格式。

以上是关于解释 callgrind 数据的主要内容,如果未能解决你的问题,请参考以下文章

带有循环检测的 Callgrind 性能分析

是否有工具可以检查两个 callgrind/valgrind 配置文件的差异?

Callgrind 内联函数

kcachegrind 无法打开 callgrind 文件

使 callgrind 显示 kcachegrind 调用图中的所有函数调用

在简单的 R 文件上运行 Callgrind