Kesin sebebi vermek için yeterli bağlam olmadığı için bu gerçekten bir cevap değil, ama başıma geldiğinde bunu nasıl izleyebileceğimin bir açıklaması.
jbd2/md0-8
Üst kısmında görünmeye devam ettiğimi fark ettim iotop
. /sys/kernel/debug/tracing/events/jbd2
Ne jbd2
yaptığını belirlemek için hangi seçeneklerin bulunduğunu görmek için baktım .
NOT-1: Hata ayıklama izleme olaylarının çıktısını görmek için cat /sys/kernel/debug/tracing/trace_pipe
- İzleri etkinleştirirken / devre dışı bırakırken terminalde çalışıyordum.
NOT-2: Olayları izleme amacıyla etkinleştirmek için örn echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
. Devre dışı bırakmak için echo 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
.
Etkinleştirerek başladım /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
- ancak çıktıda özellikle ilginç görünen hiçbir şey yoktu. İzlemek için birkaç olay daha denedim ve etkinleştirdiğimde /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enable
her saniye gerçekleştiğini gördüm:
# 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
Bu sync(2)
/ fsync(2)
/ ile ilgili msync(2)
görünüyordu, bu yüzden bunu bir sürece bağlamak için bir yol aradım ve buldum:
# find /sys/kernel/debug/tracing/events/ | grep sync.*enable
...
/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable
...
Etkinleştirdiğimde aşağıdaki çıktıyı gördüm:
# 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
Bu bana süreç adını / kimliğini verdi - ve bu süreçte biraz daha hata ayıklama yaptıktan sonra ( nzbget
) fsync(2)
her saniye yaptığını keşfettim . Ben onun yapılandırma değiştirdikten sonra ( FlushQueue=no
, sanırım, kaynakta buldum) saniye başına bunu yapmak durdurmak fsync(2)
için sorun gitti.
Çekirdek 4.4.6-gentoo
sürümüm. Ben bu olaylarla make oldconfig
almak için çekirdek yapılandırmasında bir noktada etkinleştirdiğim (manuel olarak veya ile ) bazı seçenekler olduğunu düşünüyorum /sys/kernel/debug
- eğer yoksa, etkinleştirme hakkında daha fazla bilgi için internete bakmanız yeterli olabilir. o.