Понимание транзакций ext4 / jbd2

Я пытаюсь отлаживать некоторые проблемы, с которыми я сталкиваюсь с задержкой ввода-вывода в системе с помощью ext4, но я немного в тупике, что я не понимаю его журнализацию, а также хотел бы.

В частности, мне интересно, в какой момент записываются блоки диска, как в журнал, так и «для реального». До сих пор мое предположение заключается в том, что, когда некоторые операции с метаданными, такие как, скажем, rename() , выполняются пользовательским процессом, файловая система гарантирует, что блоки диска, на которые нужно направить операцию, находятся в буферном кэше, выполните необходимые изменения в памяти на кэшированных страницах, при создании транзакции jbd2, которая записывает измененные страницы, а затем, в какой-то более поздний момент, записывает эти страницы в журнал, а затем только тогда, когда это будет сделано, и в какой-то другой произвольно более поздней точке , запишите их в собственно файловую систему. Пожалуйста, поправьте меня, если я ошибаюсь где-то здесь.

Предполагая, что я несколько верен, мне интересно, что может вызвать запись в журнал, который будет выполнен. Это когда какая-то более общая часть FS / VM ядра решит, что пришло время сбросить грязные страницы? Это, когда в журнале больше нет места для размещения для большего количества транзакций? Что произойдет, если ядро ​​должно вернуть некоторые грязные страницы из кеша буфера? Будет ли это инициировать запись в журнале и запись основной записи в принудительной последовательности?

Кроме того, что такое стандартная терминология? Когда я вижу, что транзакция называется «совершенной», что это значит, точнее?