我正在寻找一些工具来分析花费时间的地方。看过oprofile,但这并不能真正满足我的需要。
我正在查看callgrind,特别是使用CALLGRIND_START_INSTRUMENTATION和CALLGRIND_STOP_INSTRUMENTATION宏。我不希望该工具过多地减慢应用程序的速度,就像valgrind一般。但这并没有真正奏效,因为Valgrind似乎将所有东西都集中在一个单一的线程上。
例如,如果fn A调用fb B调用fn C,然后调回B和A,我想知道花了多少时间在哪里。我有一些我正在使用的互斥工具,但是一个好的时间工具对于查看确切花费的时间非常有用,这样我就可以专注于这些路径。如果没有自己添加一些东西,我可以使用任何工具来完成这项任务吗?它是一个C ++应用程序顺便说一句。我不能使用valgrind,因为它在内核中有单线程。此外,我的应用程序花了很多时间等待,所以普通的CPU分析器并没有真正帮助那么多..
答案 0 :(得分:0)
您可能需要关注this post的第3点。
它建议不要询问 花费的时间,而为什么。
假设您正在寻找一种“花费太多时间”而非要求(通过研究堆栈样本,而不是总结它们)的方法,在一小部分时间内实际尝试完成的程序之间存在质的差异分。
这种方法可以通过测量方法找到任何可以找到的东西,还有更多。 如果反复应用,可能会导致很大的加速因素。
在多线程情况下,您可以识别非空闲的线程,并将其应用于它们。