Linux上的挂载时间分析

时间:2011-07-05 09:54:01

标签: profiling strace systemtap

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

我尝试过oprofile,但它似乎在Unhalted CPU周期方面给出了时间(那就是cputime,而不是实时)

我已经尝试了strace -T,这给了墙上的时间,但是生成的数据很大并且很难获得摘要报告(并且存在awk / py脚本?)

现在我正在寻找SystemTap,但我找不到任何足够接近并且可以修改的脚本,现场教程也没有多大帮助。我不确定我能找到的是什么。

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

3 个答案:

答案 0 :(得分:4)

this commit判断,recently released strace 4.9支持以下内容:

strace -w -c

他们称之为“系统调用延迟”(并且很难从单独的联机帮助页中看到-w所做的事情。)

答案 1 :(得分:1)

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

如果您的目标是让它尽可能快地运行,那么try random-pausing。 它没有测量任何东西,除非非常粗略。 这可能是违反直觉的,但它的作用是确定能够带来最大加速的代码。

答案 2 :(得分:1)

请参阅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()) }