如何使用 Callgrind 对程序执行的特定时间段进行性能分析?

26

我想使用Valgrind进行一些性能分析,因为它不需要重新构建程序。(我想要分析的程序已经使用“-g”选项构建了)

但是Valgrind(Callgrind)运行非常缓慢...所以这里是我想要做的:

  1. 启动服务器(我想要分析那个服务器)
  2. 连接到该服务器
  3. 在执行服务器操作之前,开始收集性能分析数据
  4. 操作完成后,停止收集性能分析数据
  5. 分析性能分析数据。

我可以使用Solaris上的Sun Studio(使用dbx)来完成这种操作。请问是否可以使用Valgrind(Callgrind)完成相同的操作呢?

谢谢。


希望Valgrind不是你唯一的选择。 你考虑过这种技术吗:(https://dev59.com/n3RC5IYBdhLWcg3wOOL1#378024) 你也可以使用pstacklsstack来完成同样的事情。花点钱,你可以得到相当不错的RotateRight/Zoom。 - Mike Dunlavey
3个回答

42

您应该查看callgrind文档,并阅读有关callgrind_control的内容。

  1. 启动您的应用程序:valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. 请参见1。
  3. 开始收集分析数据callgrind_control -i on
  4. 停止收集分析数据callgrind_control -i off
  5. 使用kcachegrindcallgrind_annotate/cg_annotate分析数据

12

要仅对某些函数进行剖析,您还可以使用CALLGRIND_START_INSTRUMENTATIONCALLGRIND_STOP_INSTRUMENTATION,它们位于<valgrind/callgrind.h>头文件中,并建议在调用callgrind时使用--instr-atstart=no选项,如Doomsday的答案所示。


我没有意识到即使使用宏,仍然有必要在valgrind中运行程序。例如:valgrind –tool=callgrind –instr-atstart=no your_server.x - Walter Nissen

4

您没有说明使用的操作系统,我假设是Linux。在这种情况下,您可能需要查看oprofile(免费)或Zoom(不免费,但可以获得评估许可证),两者都是采样分析器,可以对现有代码进行分析而无需重新编译。Zoom更加美观易用(它有一个图形用户界面和一些不错的附加功能),但您可能已经在系统上安装了oprofile。


是的,我看到其他人推荐了这两个工具。对我来说,使用valgrind的重点在于它不需要root访问权限,因为我正在使用公共服务器进行分析... - superb
我认为你只需要root访问权限来安装这些工具 - 你应该能够在没有root访问权限的情况下运行它们,对吗?(我使用Zoom从普通的非root帐户,但那是用于本地分析,所以我不能确定远程分析的情况。) - Paul R
我了解了,谢谢。但我仍然想知道是否有可能使用valgrind来做同样的事情。有时候,当我无法重现性能问题时,我需要直接查看测试机器,但安装收集硬件计数器的分析软件可能会影响系统性能,并且许多基准需要进行调整,这是不允许的。因此,如果我可以按照问题中描述的方式使用valgrind,它仍然是最好的选择。 - superb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接