El poderoso strace
me ha decepcionado. ¿Cómo es esto posible?
time foo
muestra que foo
tarda varios segundos en ejecutarse ("real"), pero utiliza un tiempo de CPU insignificante, tanto en el espacio de usuario ("usuario") como en el núcleo ("sys"). Para los curiosos, foo
se define a continuación.
Por lo tanto, pasa la mayor parte del tiempo esperando algo más, sin ejecutar las instrucciones de la CPU. Normalmente, puedo ver cómo está esperando strace
, es decir, qué llamada del sistema está bloqueando durante un largo período de tiempo. Lamentablemente, este enfoque no funcionó.
strace -ttt -T -C -w foo
muestra las llamadas al sistema, marca de tiempo y un resumen del tiempo (real) empleado en las llamadas al sistema. Pero este proceso en particular se mostró como un tiempo total (real) insignificante dentro de las llamadas al sistema.
foo
es en realidad journalctl -b -u dev-hugepages.mount
. Excepto que tuve que cambiar el último argumento a una unidad systemd diferente cada vez para reproducir esto. En otras palabras, la demora que estoy investigando ocurrió la primera vez que intenté obtener los registros de cualquier unidad systemd. EDITAR : después de responder la pregunta principal, también me di cuenta de la razón por la que tenía este problema al reproducir el retraso .
El tiempo empleado por este proceso es un problema específico, aparentemente no ocurre en todos los sistemas. https://github.com/systemd/systemd/issues/7963
journalctl
solo ejecuta un proceso. Tengo la sensación de que journalctl
usa un hilo adicional por cualquier razón: iirc hubo una llamada clone (). Creo que esto significa que eres técnicamente correcto, pero también es técnicamente irrelevante para la pregunta. time
mira el proceso en su conjunto y ha demostrado que el proceso en su conjunto es bastante somnoliento (bloqueando algo). strace
No mostró suficientes sueños. No importa si un segundo hilo está inactivo, el hilo principal también debe tener mucho sueño para explicar el time
resultado.