【问题标题】:Profiling for wall-time on LinuxLinux 上的挂墙时间分析
【发布时间】:2011-09-28 16:13:52
【问题描述】:

我有一个应用程序,我想分析在各种活动中花费了多少时间。由于此应用程序是 I/O 密集型应用程序,因此我希望获得一份报告,该报告将总结每个库/系统调用所花费的时间(挂起时间)。

我尝试过 oprofile,但它似乎在 Unhalted CPU 周期(即 cputime,而不是实时)方面提供了时间

我已经尝试过 strace -T,它给了 wall time,但是生成的数据很大,并且很难获得摘要报告(并且为此存在 awk/py 脚本?)

现在我正在寻找 SystemTap,但我没有找到任何足够接近并且可以修改的脚本,并且现场教程也没有太大帮助。我不确定我正在寻找的东西是否可以完成。

我需要有人为我指明正确的方向。 非常感谢!

【问题讨论】:

标签: profiling strace systemtap


【解决方案1】:

this commit 来看,recently released strace 4.9 支持这一点:

strace -w -c

他们称之为“系统调用延迟”(仅从手册页很难看出 -w 所做的)。

【讨论】:

  • 这是一个可行的解决方案。不敢相信这是在 2014 年才添加的。
  • 而且我不敢相信它在 CentOS 7 中仍然不可用!
  • 很高兴 strace.io 指向 build.opensuse.org/package/show/home:ldv_alt/strace,那里有许多发行版的软件包
【解决方案2】:

您这样做是出于对测量的好奇,还是因为您想找到可以修复的时间消耗以使其运行得更快?

如果您的目标是让它尽可能快地运行,那么try random-pausing。 它不测量任何东西,除了非常粗略。 这可能违反直觉,但它所做的是查明将导致最大加速的代码。

【讨论】:

  • 加速它可能是最终目标,随机暂停可能是解决问题的一种快速方法,但我希望有一个可以在必要时提供的适当分析,谢谢顺便说一句
【解决方案3】:

请参阅fntimes.stp systemtap 示例脚本。 https://sourceware.org/systemtap/examples/index.html#profiling/fntimes.stp

fntimes.stp 脚本监控给定函数族的执行时间历史(假定为非递归)。然后将每次(超出预热间隔)与历史最大值进行比较。如果超过某个阈值 (250%),则会打印一条消息。

# stap fntimes.stp 'kernel.function("sys_*")'

# stap fntimes.stp 'process("/path/to/your/binary").function("*")'

.stp 脚本的最后一行演示了跟踪给定函数系列所消耗时间的方法

probe $1.return { elapsed = gettimeofday_us()-@entry(gettimeofday_us()) }

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2012-01-07
    • 2013-06-30
    • 2011-02-17
    • 2022-08-16
    • 2011-03-21
    相关资源
    最近更新 更多