Режим data=journal
Режим data=journal обеспечивает полное журналирование и метаданных, и самих данных. Все новые данные сначала пишутся в журнал и только после этого переносятся на свое постоянное место. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние.
Теоретически, режим data=journal самый медленный из всех режимов журналирования, так как данные записываются на диск два раза. Однако было доказано, что в отдельных случаях режим data=journal показывает неплохие результаты. Эндрю Мортон, после знакомства с отчетами LKML о том, что в ext3 data=journal иногда неожиданно выдает высокую производительность, решил провести небольшое тестирование. Сначала он написал простой сценарий оболочки, предназначенный для записи данных на тестируемую файловую систему с максимально возможной скоростью:
Быстрая запись.
while true do dd if=/dev/zero of=largefile bs=16384 count=131072 done
Одновременно с записью данных на тестируемую файловую систему, он попытался прочесть 16Mb данных с другой ext2 файловой системы того же диска, подсчитав результаты:
Чтение 16Mb файла.
time cat 16-meg-file > /dev/null
Результат оказался поразительным. Режим data=journal позволил прочесть 16Mb файл в 9 - 13 раз быстрее, чем при других ext3 режимах, ReiserFS и даже ext2 (в которой журналирование вообще отсутствует):
Written-to-filesystem
16-meg-read-time (seconds)
ext2
78
ReiserFS
67
ext3 data=ordered
93
ext3 data=writeback
74
ext3 data=journal
7
Эндрю повторил тестирование, изменив условия. Чтение 16Mb файла происходило с тестируемой файловой системы. Результат оказался аналогичным. Что из этого следует? Так или иначе, но режим data=journal очень хорошо подходит для случаев, когда данные должны одновременно читаться и записываться. Поэтому режим data=journal, который теоретически считался самым медленным, оказывается, имеет преимущество в среде, сильно нагруженной интерактивными операциями ввода/вывода. По крайней мере, режим data=journal не настолько вял, как казалось бы!
Эндрю еще не нашел объяснений, почему так происходит. Возможно, ответ на этот вопрос поможет в совершенствовании ext3 так, чтобы режимы data=writeback и data=ordered стали более производительными.