在显示系统调用中花费的时间时,strace 使用的时间单位是什么?

use*_*285 10 linux process system-calls strace syscalls

使用strace带有标志的命令时-T,我想知道用于显示系统调用时间的时间单位是什么?我认为它应该在几秒钟内,但我不太确定,手册中似乎省略了它。

Ste*_*itt 23

源代码

if (Tflag) {
    ts_sub(ts, ts, &tcp->etime);
    tprintf(" <%ld.%06ld>",
        (long) ts->tv_sec, (long) ts->tv_nsec / 1000);
}
Run Code Online (Sandbox Code Playgroud)

这意味着时间以秒为单位显示,小数点后为微秒(从纳秒值计算)。


meu*_*euh 13

如果你跑

strace -T  sleep 2
Run Code Online (Sandbox Code Playgroud)

你会看见

nanosleep({tv_sec=2, tv_nsec=0}, NULL)  = 0 <2.000230>
Run Code Online (Sandbox Code Playgroud)

所以看起来花费的时间以秒为单位。


小智 6

如果您strace使用“flag -c”运行命令,它将显示一个表格,并以为单位报告时间

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
Run Code Online (Sandbox Code Playgroud)

来自 strace 的男人

-C

计算每个系统调用的时间、调用和错误,并在程序退出时报告摘要。在 Linux 上,这会尝试显示独立于挂钟时间的系统时间(在内核中运行的 CPU 时间)。如果 -c 与 -f 或 -F(如下)一起使用,则仅保留所有跟踪进程的汇总总数。