Yang perkasa strace
telah mengecewakanku. Bagaimana ini mungkin?
time foo
menunjukkan bahwa foo
dibutuhkan beberapa detik untuk menjalankan ("nyata"), tetapi menggunakan waktu cpu yang dapat diabaikan, baik di userspace ("pengguna") dan di kernel ("sys"). Bagi yang penasaran, foo
didefinisikan di bawah ini.
Jadi ia menghabiskan sebagian besar waktunya menunggu sesuatu yang lain, tidak menjalankan instruksi CPU. Biasanya, saya bisa melihat bagaimana ia menunggu strace
- yaitu panggilan sistem apa yang memblokir untuk jangka waktu yang lama. Sayangnya pendekatan ini tidak berhasil.
strace -ttt -T -C -w foo
menunjukkan panggilan sistem, cap waktu, dan ringkasan waktu (nyata) yang dihabiskan dalam panggilan sistem. Tetapi proses khusus ini menunjukkan pengeluaran keseluruhan waktu nyata (nyata) yang dapat diabaikan dalam panggilan sistem.
foo
sebenarnya journalctl -b -u dev-hugepages.mount
. Kecuali bahwa saya harus mengubah argumen terakhir ke unit systemd yang berbeda setiap kali untuk mereproduksi ini. Dengan kata lain, penundaan yang saya selidiki terjadi pertama kali ketika saya mencoba untuk mendapatkan log untuk setiap unit systemd. EDIT : setelah menjawab pertanyaan utama, saya juga menyadari alasan saya mengalami masalah ini dengan mereproduksi penundaan .
Waktu yang dihabiskan oleh proses ini adalah masalah khusus, tampaknya tidak terjadi pada semua sistem. https://github.com/systemd/systemd/issues/7963
journalctl
menjalankan satu proses. Saya merasa journalctl
menggunakan satu utas tambahan untuk alasan apa pun - iirc ada satu panggilan klon (). Saya pikir ini berarti Anda secara teknis benar, tetapi secara teknis juga tidak relevan dengan pertanyaan. time
melihat proses secara keseluruhan, dan telah menunjukkan bahwa proses secara keseluruhan agak mengantuk (menghalangi sesuatu). strace
tidak menunjukkan cukup tidur. Tidak masalah jika utas kedua sedang tidur, utas utama juga harus sangat mengantuk untuk menjelaskan time
hasilnya.