O poderoso strace
me decepcionou. Como isso é possível?
time foo
mostra que foo
leva alguns segundos para ser executado ("real"), mas usa tempo de CPU insignificante, tanto no espaço do usuário ("usuário") quanto no kernel ("sys"). Para os curiosos, foo
é definido abaixo.
Portanto, ele passa a maior parte do tempo aguardando algo mais, sem executar as instruções da CPU. Normalmente, posso ver como ela está aguardando strace
- ou seja, em qual chamada do sistema está bloqueando por um longo período de tempo. Infelizmente, essa abordagem não funcionou.
strace -ttt -T -C -w foo
mostra as chamadas do sistema, com registro de data e hora e um resumo do tempo (real) gasto nas chamadas do sistema. Mas esse processo em particular mostrou como passar um tempo geral (real) insignificante nas chamadas do sistema.
foo
é realmente journalctl -b -u dev-hugepages.mount
. Só que eu tive que mudar o último argumento para uma unidade systemd diferente a cada vez para reproduzir isso. Em outras palavras, o atraso que estou investigando aconteceu na primeira vez que tento obter os logs para qualquer unidade systemd. EDIT : depois de responder à pergunta principal, também percebi o motivo pelo qual estava tendo esse problema ao reproduzir o atraso .
O tempo gasto por esse processo é um problema específico, aparentemente não ocorre em todos os sistemas. https://github.com/systemd/systemd/issues/7963
journalctl
executa apenas um processo. Eu tenho a sensação de que journalctl
usa um thread extra por qualquer motivo - iirc, houve uma chamada de clone (). Eu acho que isso significa que você está tecnicamente correto, mas também é tecnicamente irrelevante para a questão. time
analisa o processo como um todo e mostrou que o processo como um todo é bastante sonolento (bloqueando alguma coisa). strace
não mostrou dorme suficiente. Não importa se um segundo thread está inativo, o thread principal também deve estar com muito sono para explicar o time
resultado.