O poderoso straceme decepcionou. Como isso é possível?
time foomostra que fooleva 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 foomostra 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
journalctlexecuta apenas um processo. Eu tenho a sensação de que journalctlusa 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. timeanalisa o processo como um todo e mostrou que o processo como um todo é bastante sonolento (bloqueando alguma coisa). stracenã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 timeresultado.