我有一个应用程序,我想知道在各种活动中花了多少时间。由于此应用程序是I / O密集型的,我希望得到一份报告,总结每个磁带库/系统调用(挂起时间)花费的时间。
我尝试过oprofile,但它似乎在Unhalted CPU周期方面给出了时间(那就是cputime,而不是实时)
我已经尝试了strace -T,这给了墙上的时间,但是生成的数据很大并且很难获得摘要报告(并且存在awk / py脚本?)
现在我正在寻找SystemTap,但我找不到任何足够接近并且可以修改的脚本,现场教程也没有多大帮助。我不确定我能找到的是什么。
我需要有人指出我正确的方向。 非常感谢!
答案 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()) }