2

我正在寻找一些工具来分析时间花在哪里。看过oprofile,但这并没有真正给我我需要的东西。

我正在查看 callgrind,特别是使用 CALLGRIND_START_INSTRUMENTATION 和 CALLGRIND_STOP_INSTRUMENTATION 宏。我不希望该工具像 valgrind 通常那样使应用程序减慢太多。但这并没有真正起作用,因为 Valgrind 似乎将所有内容都序列化到一个线程中。

例如,如果 fn A 调用 fn C 的 fb B,然后返回到 B 和 A,我想知道在哪里花费了多少时间。我有一些正在使用的互斥锁工具,但是一个好的时间工具对于查看时间到底花在哪里非常有用,这样我就可以专注于这些路径。除了自己添加一些东西之外,有什么工具可以用来完成这项任务吗?顺便说一句,它是一个 C++ 应用程序。我不能使用 valgrind,因为它在内核中是单线程的。此外,我的应用程序需要花费大量时间等待,所以普通的 CPU 分析器并没有真正提供太多帮助。

4

1 回答 1

0

您可能想看看这篇文章的第 3 点。

它建议不要问时间花在哪里,而要问为什么

假设您正在寻找一些“花费太多时间”的方法与询问(通过研究堆栈样本,而不是总结它们)程序在一小部分时间点实际尝试完成什么之间存在质的差异。

这种方法可以找到任何你可以通过测量方法找到的东西,等等。如果重复应用,可能会导致很大的加速因素。

在多线程情况下,您可以识别非空闲的线程,并将其应用于它们。

于 2012-04-13T17:27:53.307 回答