Це насправді не відповідь, оскільки немає достатнього контексту, щоб дати точну причину, але це опис того, як мені вдалося відстежити це, коли воно трапилося зі мною.
Я помітив, що я jbd2/md0-8
постійно показувався на вершині iotop
. Я зазирнув, /sys/kernel/debug/tracing/events/jbd2
щоб побачити, які існують варіанти, щоб визначити, що jbd2
робив.
ПРИМІТКА-1: Щоб побачити вихід для налагодження подій відслідковування помилок cat /sys/kernel/debug/tracing/trace_pipe
- у мене це було запущено в терміналі під час включення / відключення слідів.
ПРИМІТКА-2: Щоб увімкнути події для відстеження використання, наприклад echo 1 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
. Щоб відключити echo 0 > /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
.
Я почав із включення /sys/kernel/debug/tracing/events/jbd2/jbd2_run_stats/enable
- але нічого, що здавалося б особливо цікавим у висновку для цього, не було. Я спробував простежити кілька інших подій, і коли я ввімкнув, /sys/kernel/debug/tracing/events/jbd2/jbd2_commit_flushing/enable
побачив, що це відбувається щосекунди:
# 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
Це виглядало так, як це пов’язано з sync(2)
/ fsync(2)
/ msync(2)
, тому я шукав певний спосіб пов’язати це з процесом і виявив це:
# find /sys/kernel/debug/tracing/events/ | grep sync.*enable
...
/sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable
...
Коли я це ввімкнув, я побачив такий вихід:
# 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
Це дало мені ім'я процесу / id - і, зробивши ще кілька налагоджень цього процесу ( nzbget
), я виявив, що це робить fsync(2)
щосекунди. Після того, як я змінив його конфігурацію ( FlushQueue=no
я недокументований, я вважаю, знайшов її в джерелі), щоб зупинити це робити за секунду, fsync(2)
проблема пішла.
Моя версія ядра 4.4.6-gentoo
:. Я думаю, що make oldconfig
в якийсь момент у налаштуваннях ядра було налаштовано деякі параметри, які я ввімкнув (або вручну або за допомогою ), щоб отримати /sys/kernel/debug
ці події - тому, якщо у вас цього немає, можливо, просто подивіться по Інтернету для отримання додаткової інформації про включення це.