Qual é a unidade de tempo que o strace usa ao exibir o tempo gasto em syscalls?

10

Ao usar o comando stracecom o sinalizador -T, gostaria de saber qual é a unidade de tempo usada para exibir o tempo gasto nos syscalls? Suponho que demore alguns segundos, mas não tenho muita certeza e parece ter sido omitido no manual.

user311285
fonte

Respostas:

23

Do código fonte :

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

Isso significa que o tempo é mostrado em segundos, com microssegundos (calculados a partir do valor em nanossegundos) após o ponto decimal.

Stephen Kitt
fonte
13

Se você correr

strace -T  sleep 2

você verá

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

parece que o tempo gasto é em segundos.

meuh
fonte
6

Se você executar o comando straceusando o "sinalizador -c", ele mostrará uma tabela e o tempo será relatado em segundos :

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

do homem de Strace

-c

Conte o tempo, as chamadas e os erros de cada chamada do sistema e relate um resumo da saída do programa. No Linux, isso tenta mostrar o tempo do sistema (tempo de CPU gasto em execução no kernel) independentemente do tempo do relógio de parede. Se -c for usado com -f ou -F (abaixo), apenas os totais agregados para todos os processos rastreados serão mantidos.


fonte