解释strace以表征延迟/延迟

时间:2012-07-21 13:28:52

标签: performance strace

我在Linux Kernel 2.6.27.45上的嵌入式系统上运行了一个守护进程。其中一个进程没有按预期执行,我尝试使用 strace 进行进一步分析。(我添加了一些功能来打印附加进程的堆栈跟踪到strace,跟随网上的一些帖子)。 使用的命令是:

enter code here
strace  -T -i -r -tt -q -O 1 -o /tmp/syscallsM -p $tpid

我得到如下输出(在第1列排序后):

0.966638 [088cea24: 360eead8 08f9e71c ]089985d4 ]08998e20 ]12c9352c ]1058e71c ]10551388 ]1054e120 ]10517f40 ]105143e0 ]10514c1c ]write(33, "x", 1) = 1 <0.028588>

 0.417500 [088d625c: 3b3e1878 121576e8 ]12163e1c ]1216473c ]12b6e75c ]112bc3e0 ]112d7880 ]112d7aa0 ]112d6b00 ]112d9aec ]112fd000 ]ioctl(29, 0x20004c01, 0) = 0 <0.000032>

 0.282577 [1019e878: 30766c98 1374a008 ]1374a1f0 ]10198854 ]10198b0c ]1019908c ]10195cb4 ]10195e08 ]1019611c ]1019a810 ]10191fa0 ]--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---

 0.252104 [082f4808: 35a55a08 0899e314 ]1217ecb8 ]11c47918 ]1219a614 ]12bfeee4 ]1058e71c ]105c51f0 ]105c5980 ]10578674 ]105bfa4c ]futex(0x89ba380, FUTEX_LOCK_PI, 1) = 0 <0.000033>

我的问题是:

(1)如果我们采用例如0.252104开头的行,是否意味着252ms包括之前在堆栈上的所有函数所花费的时间(1019e878,... 10191fa0)并且执行到了在当前堆栈中调用futex()(082f4808 ... 1219a614,... 10578674)PLUS执行futex()调用(33us)的时间是否超时?

(2)有没有办法弄清楚futex()调用是否真的导致进程等待?

(3)内核在进行系统调用时是否安排了这项任务?

(4)在以0.282577开头的行中,SIGALARM时间是否导致283ms延迟? (5)在以0.417500开头的行中,是否在418ms延迟时产生ioctl()调用结果? (虽然ioctl()本身是在32us完成的)。 谢谢和问候。

0 个答案:

没有答案