strace
フラグと一緒にコマンドを使用するときに、-T
システムコールにかかった時間を表示するために使用される時間単位が何であるかを知りたいです。秒単位でやらなければならないようですがよく分からないしマニュアルにも省略されているようです。
答え1
~からソースコード:
if (Tflag) {
ts_sub(ts, ts, &tcp->etime);
tprintf(" <%ld.%06ld>",
(long) ts->tv_sec, (long) ts->tv_nsec / 1000);
}
つまり、時間は小数点以下のマイクロ秒(ナノ秒値で計算)で秒単位で表示されます。
答え2
走れば
strace -T sleep 2
あなたは見るでしょう
nanosleep({tv_sec=2, tv_nsec=0}, NULL) = 0 <2.000230>
だからかかった時間は秒単位のようです。
答え3
"flag -c"でコマンドを実行すると、テーブルが表示され、strace
時間が報告されます。第二:
strace -c -p 3569 # 3569 is PID
strace: Process 3569 attached
^Cstrace: Process 3569 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.73 0.016000 8 1971 poll
0.16 0.000025 0 509 75 futex
0.06 0.000010 0 1985 1966 recvmsg
0.06 0.000009 0 2336 mprotect
0.00 0.000000 0 478 read
0.00 0.000000 0 13 write
0.00 0.000000 0 29 mmap
0.00 0.000000 0 9 munmap
0.00 0.000000 0 18 writev
0.00 0.000000 0 351 madvise
0.00 0.000000 0 1 restart_syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.016044 7700 2041 total
-氏
各システムコールの時間、呼び出し、およびエラーを計算し、プログラムの終了時に要約を報告します。 Linuxでは、ウォールクロック時間に関係なく、システム時間(カーネルで実行されるのに費やされたCPU時間)を表示しようとします。 -cを-fまたは-F(下)と組み合わせて使用すると、追跡されたすべてのプロセスの合計のみが維持されます。
答え4
これはstraceの要約を見るとわかります。たとえば、
$ strace -ce trace=write -p $(pidof app)
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.061558 17 3544 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.061558 3544 total
- システムコールの書き込みに要した合計時間= 0.061558秒。または 0.061558*1000000 = 61558 マイクロ秒 (usec)
- usec/call=61558 usec/3544 call=17.778