使用 callgrind/kcachegrind 获取每个线程的统计信息

Posted

技术标签:

【中文标题】使用 callgrind/kcachegrind 获取每个线程的统计信息【英文标题】:Using callgrind/kcachegrind to get per-thread statistics 【发布时间】:2011-01-23 19:26:48 【问题描述】:

我希望能够了解我的应用程序中的每个线程在使用 callgrind 时有多“昂贵”。我使用--separate-thread=yes 选项进行了概要分析,该选项为您提供了整个应用程序的 callgrind 文件,然后为每个线程提供了一个文件。

这对于查看任何给定线程的配置文件很有用,但我真正想要的只是每个线程的 CPU 时间排序列表,以便我可以看到哪些线程是最大的猪。

【问题讨论】:

【参考方案1】:

只需在 kcachegrind 中同时打开多个配置文件。

【讨论】:

【参考方案2】:

Valgrind/Callgrind 不允许这种行为。 kcachegrind 都没有,但我认为这将是一个很好的改进。也许可以在他们的邮件列表中找到一些答案。

一个工作但真的很无聊的方法可能是使用选项--separate-thread=no,并更新你的代码为每个线程使用一个不同的函数名或类名。根据您的代码复杂性,它可能是答案(使用 1computeData()、2computeData()、..)

【讨论】:

是的,这与我得出的结论大致相同。猜猜这是一个开源贡献的好主意!

以上是关于使用 callgrind/kcachegrind 获取每个线程的统计信息的主要内容,如果未能解决你的问题,请参考以下文章

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”