Linux
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>
這是正確的嗎?
這是非常正確的,是的。
顯示的額外時間
-r
不是等待的時間,而是做其他不涉及系統呼叫的事情(計算、記憶體操作……)的時間。
考慮到這個答案,在計算和其他類似的東西中, strace本身必須花費一些時間。
strace的工作方式導致核心在每個系統呼叫的開始和結束時停止正在跟踪的程序,因此strace可以檢查它然後恢復執行。
因此,連續系統呼叫開始之間的時間差必須包括strace本身花費的一些時間。