`strace -r` 和 `strace -T` 选项之间的区别?

`strace -r` 和 `strace -T` 选项之间的区别?

两者有什么区别?在手册页中它说:

   -r          Print a relative timestamp upon entry to each system call.  This records the time difference between  the  beginning  of
               successive system calls.

   -T          Show the time spent in system calls.  This records the time difference between the beginning and the end of each  system
               call.

我唯一的解释是,它-T显示了每次调用所花费的时间,同时-r也考虑了每次系统调用后等待所花费的时间。

这似乎得到了以下事实的支持:当查看命令strace上的相应片段时uptime,该-r命令显示的每次调用时间比-T下面更长。见下文:

0.000039 uname({sysname="Linux", nodename="ip-172-31-55-20", ...}) = 0
0.000043 open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
0.000045 read(3, "0\n", 8192)      = 2
0.000035 close(3)                  = 0

&

uname({sysname="Linux", nodename="ip-172-31-55-20", ...}) = 0 <0.000010>
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3 <0.000018>
read(3, "0\n", 8192)                    = 2 <0.000014>
close(3)                                = 0 <0.000023>

这是正确的吗?

答案1

这是非常正确的,是的。

显示的额外时间-r不是等待的时间,而是执行其他不涉及系统调用的事情的时间(计算、内存操作...)。

答案2

考虑到这一点回答,除了计算之类的事情之外,肯定还需要花费一些时间斯特雷斯本身。

道路斯特雷斯工作会导致内核在每个系统调用的开始和结束时停止跟踪程序,因此斯特雷斯可以检查它然后恢复执行。

因此,连续系统调用开始之间的时间差必须包括系统调用所花费的一些时间。斯特雷斯本身。

相关内容