Какую единицу времени использует strace при отображении времени, проведенного в системных вызовах?

10

При использовании команды straceс флагом -Tя хотел бы знать, какая единица времени используется для отображения времени, проведенного в системных вызовах? Я предполагаю, что это должно быть в считанные секунды, но я не совсем уверен, и это, кажется, опущено в руководстве.

user311285
источник

Ответы:

23

Из исходного кода :

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

Это означает, что время показывается в секундах с микросекундами (рассчитанными по значению наносекунды) после десятичной точки.

Стивен Китт
источник
13

Если вы бежите

strace -T  sleep 2

ты увидишь

nanosleep({tv_sec=2, tv_nsec=0}, NULL)  = 0 <2.000230>

Похоже, что время в секундах.

meuh
источник
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

от мужчины Стрейса

Подсчитайте время, вызовы и ошибки для каждого системного вызова и составьте сводную информацию о выходе из программы. В Linux это пытается показать системное время (процессорное время, потраченное на работу в ядре) независимо от времени настенных часов. Если -c используется с -f или -F (ниже), сохраняются только совокупные итоги для всех отслеживаемых процессов.


источник