【问题标题】:How use callgrind to profiling only a certain period of program execution?如何使用 callgrind 仅分析程序执行的某个时间段?
【发布时间】:2011-01-24 21:28:55
【问题描述】:

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

但是 valgrind(callgrind) 很慢......所以这就是我要做的:

  1. 启动服务器(我想分析该服务器)
  2. 某种附加到该服务器的方式
  3. 在我对服务器进行一些操作之前,开始收集配置文件数据
  4. 操作完成后,结束采集配置文件数据
  5. 分析分析数据。

我可以在 Solaris 上使用 sun studio 来做这种事情。 (使用 dbx )。我只是想知道是否可以使用 valgrind(callgrind) 做同样的事情?

谢谢

【问题讨论】:

  • 我希望 Valgrind 不是你唯一的选择。您是否考虑过这种技术:(stackoverflow.com/questions/375913/…) 您也可以使用 pstacklsstack 来做同样的事情。为了钱,你可以得到相当不错的 RotateRight/Zoom。

标签: profiling valgrind callgrind


【解决方案1】:

对于仅分析某些功能,您还可以从<valgrind/callgrind.h> 标头中找到有用的CALLGRIND_START_INSTRUMENTATIONCALLGRIND_STOP_INSTRUMENTATION,并按照Doomsday's answer 中的建议使用callgrind 的--instr-atstart=no 选项。

【讨论】:

  • 我没有意识到仍然需要在 valgrind 中运行您的程序,即使使用宏也是如此。例如,valgrind –tool=callgrind –instr-atstart=no your_server.x
【解决方案2】:

您应该查看callgrind documentation,并阅读有关 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 分析数据

【讨论】:

    【解决方案3】:

    你没有说什么操作系统——我假设是 Linux——在这种情况下你可能想看看 oprofile(免费)或Zoom(不是免费的,但你可以获得评估许可证),这两者是采样分析器,无需重新编译即可分析现有代码。 Zoom 更好也更容易使用(它有一个 GUI 和一些不错的附加功能),但您的系统上可能已经有 oprofile。

    【讨论】:

    • 是的,我只是看到其他一些人推荐了这两个工具。对我来说,使用 valgrind 的重点是它没有 root 访问权限,因为我使用公共服务器进行分析......
    • 我认为您只需要 root 访问权限即可安装这些工具 - 您应该能够在没有 root 访问权限的情况下运行它们,不是吗? (我使用普通非 root 帐户的 Zoom,但那是用于本地分析,所以我不能确定远程分析情况。)
    • 我明白了,谢谢。但我仍然想知道是否可以使用 valgrind 来做同样的事情。有时当我无法重现性能问题时,我需要直接查看测试机器,但安装 profiling 软件(收集硬件计数器)可能会影响系统性能,并且需要调整很多基线,这是不允许的。所以 valgrind 是仍然是最好的选择,如果我可以按照我在问题中描述的方式使用它。
    猜你喜欢
    • 2012-06-03
    • 2018-10-29
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多