Ubuntu Box上的应用程序分析

时间:2014-05-08 06:07:16

标签: c linux performance profiling

我有用C编写的这个应用程序,应该调整它以提高性能。我查看了Linux中可用的一些性能分析器,发现了GNU profiler,valgrind就是其中的一部分。问题是它们都只提供功能级别的分析信息,而不是我需要的语句级别分析。是否有任何工具可以提供此信息。

2 个答案:

答案 0 :(得分:1)

使用-g编译代码以获取调试符号,并使用-O0编译代码,以便优化程序不会对代码进行加密。

然后在GDB调试器下运行它,当它很慢时,通过键入Ctrl-C来中断它。 它将在另一个线程上停止,因此键入thread 1以进入活动线程。 然后键入bt以显示调用堆栈。 仔细看看它,了解它正在做什么,以及它为什么这样做,当你停止它时。

这样做几次,你会非常准确地知道如何花时间。 这是random pausing技术,如果您在那里查看评论,您将看到它的工作情况。 另外,FWIW,我做了short video of it

正如您所指出的,大多数分析器都不会为您提供行级信息。我知道一个给你a)行级别信息,b)包容性时间("自我时间"几乎无用),c) wall-clock time(所以你不会对I / O视而不见)是Zoom。 也许其他人可以做到,我不确定。

即使分析器为您提供了所有这些,它也会为您提供宝贵的上下文,而上下文是您需要能够识别的时间,而实际上您可以摆脱的时间。 随机暂停为您提供完整的上下文。 它让你的大脑认识到正在发生的事情,最重要的是为什么,而不仅仅是给你数字或图形的摘要,并希望这足以找到加速。

如果你已经挤出了每个周期,你仍然会看到很多样本终止于编译器编译的代码中,然后打开-O3并让优化器完成它的工作。

答案 1 :(得分:0)

perf工具是开始分析的好方法,这是link

oprofile也不错,但你需要root访问权限,这就是link

如果你想看到每行分析更好地使用 annotate 选项.try来使用非剥离二进制文件并使用-g -static标志进行编译。这是你想要什么或不同的答案。