使用 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)和不使用它有啥区别?