Il potente stracemi ha deluso. Com'è possibile?
time foomostra che l' fooesecuzione di alcuni secondi ("reale"), ma utilizza un tempo della CPU trascurabile, sia nello spazio utente ("utente") che nel kernel ("sys"). Per i curiosi, fooè definito di seguito.
Quindi passa la maggior parte del tempo ad aspettare qualcos'altro, non eseguendo le istruzioni della CPU. Normalmente, posso vedere come sta aspettando strace, ovvero quale chiamata di sistema sta bloccando per un lungo periodo di tempo. Purtroppo questo approccio non ha funzionato.
strace -ttt -T -C -w foomostra le chiamate di sistema, il timestamp e un riepilogo del tempo (reale) trascorso nelle chiamate di sistema. Ma questo particolare processo ha dimostrato di passare un tempo (reale) complessivo trascurabile all'interno delle chiamate di sistema.
fooè in realtà journalctl -b -u dev-hugepages.mount. Tranne il fatto che ho dovuto cambiare l'ultimo argomento in un'unità di sistema diversa ogni volta per poterlo riprodurre. In altre parole, il ritardo che sto indagando è avvenuto la prima volta che provo a ottenere i registri per una qualsiasi unità di sistema. EDIT : dopo aver risposto alla domanda principale, ho anche capito il motivo per cui avevo questo problema a riprodurre il ritardo .
Il tempo impiegato da questo processo è un problema specifico, apparentemente non si verifica su tutti i sistemi. https://github.com/systemd/systemd/issues/7963
journalctlesegua un solo processo. Ho la sensazione che journalctlusi un thread in più per qualsiasi motivo - tra cui c'era una chiamata clone (). Penso che questo significhi che sei tecnicamente corretto, ma è anche tecnicamente irrilevante per la domanda. timeesamina il processo nel suo insieme e ha dimostrato che il processo nel suo insieme è piuttosto assonnato (bloccando qualcosa). stracenon ha mostrato abbastanza sonno. Non importa se un secondo thread è inattivo, anche il thread principale deve essere molto assonnato per spiegare il timerisultato.