¿Cuál es la unidad de tiempo que usa strace cuando se muestra el tiempo empleado en llamadas al sistema?

10

Al usar el comando stracecon la bandera -T, me gustaría saber cuál es la unidad de tiempo utilizada para mostrar el tiempo que se pasa en las llamadas al sistema. Supongo que debería ser en segundos, pero no estoy muy seguro y parece que se omite del manual.

usuario311285
fuente

Respuestas:

23

Del código fuente :

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

Esto significa que el tiempo se muestra en segundos, con microsegundos (calculados a partir del valor en nanosegundos) después del punto decimal.

Stephen Kitt
fuente
13

Si tu corres

strace -T  sleep 2

ya verás

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

entonces parece que el tiempo empleado es en segundos.

meuh
fuente
6

Si ejecuta el comando straceusando la "bandera -c", le mostrará una tabla y el tiempo se informa en 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

del hombre de strace

-C

Cuente el tiempo, las llamadas y los errores para cada llamada al sistema e informe un resumen al salir del programa. En Linux, esto intenta mostrar la hora del sistema (tiempo de CPU empleado en el kernel) independientemente de la hora del reloj de pared. Si -c se usa con -f o -F (a continuación), solo se mantienen los totales agregados para todos los procesos rastreados.


fuente