Güçlü stracebeni hayal kırıklığına uğrattı . Bu nasıl mümkün olabilir?
time foogösterilmesi foobirkaç saniye alır ("gerçek"), ancak hem kullanıcı alanında ("kullanıcı") hem de çekirdeğinde ("sys") önemsiz işlemci zamanını kullanır. Meraklı için fooaşağıda tanımlanmıştır.
Bu yüzden zamanının çoğunu CPU talimatlarını yürütmek yerine başka bir şey beklemekle geçirir. Normalde, nasıl beklediğini görebiliyorum strace- yani hangi sistem çağrısının uzun bir süredir bloke ettiğini. Ne yazık ki bu yaklaşım işe yaramadı.
strace -ttt -T -C -w foosistem çağrılarını, zaman damgalı ve sistem çağrılarında harcanan (gerçek) zamanın bir özetini gösterir. Ancak bu özel süreç, sistem çağrıları içinde ihmal edilebilir toplam (gerçek) zaman harcadığını göstermiştir.
fooaslında journalctl -b -u dev-hugepages.mount. Bunun dışında, her seferinde yeniden üretmek için son argümanı farklı bir systemd birimiyle değiştirmek zorunda kaldım. Başka bir deyişle, araştırdığım gecikme, herhangi bir sistem birimi için günlükleri almaya çalıştığımda ilk kez oldu. DÜZENLEME : ana soruyu cevapladıktan sonra, bu sorunu geciktirme nedenini yaşadığımı da fark ettim .
Bu işlem tarafından harcanan zaman belirli bir konudur, görünüşe göre tüm sistemlerde görülmez. https://github.com/systemd/systemd/issues/7963
journalctlsadece bir süreç var. Ben bir journalctlsebeple ekstra bir iş parçacığı kullanır bir duygu var - iirc bir klon () çağrı vardı. Bunun teknik olarak doğru olduğunuz anlamına geldiğini düşünüyorum, ancak aynı zamanda teknik olarak soru ile ilgisi yok. timesürece bir bütün olarak bakar ve sürecin bir bütün olarak oldukça uykulu olduğunu gösterir (bir şeyi bloke eder). straceyeterli uyuma göstermedi. İkinci bir ipliğin uyku durumunda olması önemli değildir, ana iplik de timesonucu açıklamak için çok uykulu olmalıdır .