Ini sebenarnya bukan jawaban karena tidak ada konteks yang cukup untuk memberikan penyebab yang tepat, tetapi ini adalah deskripsi bagaimana saya berhasil melacak ini ketika itu terjadi pada saya.
Saya perhatikan saya jbd2/md0-8
terus muncul di atas iotop
. Saya melihat /sys/kernel/debug/tracing/events/jbd2
ke dalam untuk melihat opsi apa yang ada untuk menentukan apa yang jbd2
sedang dilakukan.
CATATAN-1: Untuk melihat output untuk acara pelacakan penelusuran cat /sys/kernel/debug/tracing/trace_pipe
- Saya menjalankan terminal ini saat mengaktifkan / menonaktifkan jejak.
CATATAN-2: Untuk mengaktifkan acara untuk melacak penggunaan misalnya echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
. Untuk menonaktifkan echo 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
.
Saya mulai dengan mengaktifkan /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
- tetapi tidak ada yang tampak sangat menarik dalam output untuk itu. Saya mencoba beberapa peristiwa lain untuk melacak dan ketika saya mengaktifkan /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enable
saya melihat itu terjadi setiap detik:
# cat /sys/kernel/debug/tracing/trace_pipe
...
jbd2/md0-8-2520 [004] .... 658660.216492: jbd2_commit_flushing: dev 9,0 transaction 32856413 sync 0
jbd2/md0-8-2520 [001] .... 658661.334900: jbd2_commit_flushing: dev 9,0 transaction 32856414 sync 0
jbd2/md0-8-2520 [001] .... 658661.394113: jbd2_commit_flushing: dev 9,0 transaction 32856415 sync 0
Ini sepertinya terkait dengan sync(2)
/ fsync(2)
/ msync(2)
, jadi saya mencari beberapa cara untuk menautkan ini ke proses dan menemukan ini:
# find /sys/kernel/debug/tracing/events/ | grep sync.*enable
...
/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable
...
Ketika saya mengaktifkannya saya melihat output berikut:
# cat /sys/kernel/debug/tracing/trace_pipe
...
nzbget-17367 [002] .... 658693.222288: ext4_sync_file_enter: dev 9,0 ino 301924373 parent 301924357 datasync 1
jbd2/md0-8-2520 [001] .... 658693.284080: jbd2_commit_flushing: dev 9,0 transaction 32856465 sync 0
nzbget-17367 [000] .... 658693.334267: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1
jbd2/md0-8-2520 [002] .... 658693.334275: jbd2_commit_flushing: dev 9,0 transaction 32856466 sync 0
nzbget-17367 [001] .... 658694.369514: ext4_sync_file_enter: dev 9,0 ino 301924367 parent 301924357 datasync 1
jbd2/md0-8-2520 [002] .... 658694.414861: jbd2_commit_flushing: dev 9,0 transaction 32856467 sync 0
nzbget-17367 [001] .... 658694.470872: ext4_sync_file_enter: dev 9,0 ino 301924357 parent 301924353 datasync 1
jbd2/md0-8-2520 [002] .... 658694.470880: jbd2_commit_flushing: dev 9,0 transaction 32856468 sync 0
Ini memberi saya nama proses / id - dan setelah melakukan lebih banyak debugging dari proses ini ( nzbget
) saya menemukan itu melakukan fsync(2)
setiap detik. Setelah saya mengubah konfigurasi ( FlushQueue=no
, menurut saya tidak berdokumen, menemukannya dalam sumber) untuk menghentikannya melakukan hal ini per detik fsync(2)
masalahnya hilang.
Versi kernel saya adalah. 4.4.6-gentoo
Saya pikir ada beberapa opsi yang saya aktifkan (baik secara manual atau dengan make oldconfig
) di beberapa titik di konfigurasi kernel untuk mendapatkan /sys/kernel/debug
dengan peristiwa ini - jadi jika Anda tidak memilikinya mungkin hanya melihat-lihat internet untuk informasi lebih lanjut tentang mengaktifkan Itu.