【问题标题】:Profiling network software / Profiling software with lot of system call waiting分析网络软件/具有大量系统调用等待的分析软件
【发布时间】:2011-09-09 23:21:06
【问题描述】:

我正在开发一个复杂的网络软件,但我无法确定如何提高系统性能。

特别是在使用阻塞同步调用的软件的一部分中。由于系统的这一部分正在执行大量计算,因此几乎不可能确定该组件的缓慢是由这些计算还是由系统的其他部分造成的。

是否有任何轻量级的分析器可以捕获这些信息?我不能使用像 valgrind 这样的重型配置文件,因为这会完全扭曲结果(尽管 valgrind 会很完美,因为它可以捕获所有必需的信息)。

我尝试使用 oProfile,但无法从中获得任何有意义的结果(也许如果某处有简明教程...)。

【问题讨论】:

  • 我再给 oprofile 一个机会,谷歌“oprofile 教程”看看你是否找到任何符合你需要的东西
  • @Fredrik 问题是我能够使用这些教程运行 oprofile,但我无法从中获得任何有意义的信息。这是教程未涵盖的内容,它们通常以“现在我们有了结果”结尾。
  • ltracestrace 非常有助于了解代码在哪里花费时间,尤其是使用 -c 开关(概述/摘要)和 -e 开关(深入了解详细信息)。
  • @William Pursell gprof 仅捕获用户时间
  • @Let_Me_Be 也许我不明白这个问题。如果您需要知道系统调用花费了多少时间,请在其周围放置一个包装器,gprof 会告诉您在包装器中花费的时间。重构代码以增加模块化通常足以让 gprof 告诉你想要什么。

标签: c linux networking profiling distributed


【解决方案1】:

注释掉你的“繁重计算”,看看它是否仍然很慢。这将告诉您它是否正在通过网络或计算等待其他系统。答案可能不是非此即彼,而可能只是事物的积累。

【讨论】:

  • 你不能只注释掉一个工作系统的一部分:-D 没有计算就没有网络通信。
【解决方案2】:

您需要的是在挂钟时间(不仅仅是像 gprof 那样的 CPU 时间)上为您提供堆栈样本的东西,并按行(而不仅仅是按函数)报告包含样本的百分比行。

Zoom 会做到的, 但我只是do random-pausing。这是why it works。 这是一个逐个打击example。 这是another explanation

【讨论】:

  • 为 Zoom 购买了一份许可证。效果很好。
【解决方案3】:

您还可以进行一些老式的 printf 调试并将执行该函数之前和之后的时间打印到标准输出或系统日志。这与 profiling 一样轻量级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多