Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
2006 г.

Руководство по продвинутым файловым системам
Неожиданности от ext3

Дэниел Роббинс (Daniel Robbins), перевод Владимира Холманова, под редакцией Алексея Федорчука

Первоисточник: http://www-106.ibm.com/developerworks/library/l-fs8.html
Декабрь 2001

Зачем оно нужно?

Я хочу быть честным. В этой статье я планировал описать установку и настройку ext3 на вашей системе. Хотя такая цель была обозначена, это не совсем то, о чем пойдет разговор. У Эндрю Мортона (Andrew Morton) имеется превосходная страница Using the ext3 filesystem in 2.4 kernels, что делает простое объяснение перехода на ext3 излишним (зачем повторять то, что прекрасно описано у других). Вместо этого я собираюсь обратить ваше внимание на неожиданные стороны использования ext3 и, думаю, это будет полезным для вас. После прочтения этой статьи вы будете готовы к более осознанному переходу на ext3, чем в случае "пересказа" страницы Эндрю. По крайней мере, я на это надеюсь.

Новые модификации ядра 2.4.

Давайте начнем с ядра. Я обсуждал стабильную 2.4 ветку, когда описывал ReiserFS. При написании той (часть 2) статьи я рекомендовал остановиться на одной из последних к тому времени 2.4.4-ac9 версии ядра. В то время эту версию можно было рекомендовать как наиболее приемлемую для использования ReiserFS в промышленной среде. Поскольку с того времени утекло много воды и 2.4.4-ac9 уже не новость, пришло время сказать несколько слов о более современных версиях.

С появлением 2.4.10 серия 2.4 вышла на новый уровень производительности и универсальности (а вопросы были). Что же такое принципиальное случилось, что позволило Linux 2.4 выйти из кризиса? В акрониме к VM Linus признал, что серия 2.4 не оправдала надежд, и, прежде всего, из-за проблематичного кода VM. Первоначальный код поменяли на неотработанную и среднюю VM реализацию от Andrea Archangeli. Новая VM реализация от Andrea (впервые появилась в 2.4.10) стала действительно большим шагом вперед. Производительность ядра реально увеличилось, а система стала более чувствительной. 2.4.10 определенно поворотный пункт в развитии ядра 2.4 Linux. До этого момента оптимизм понемногу таял, и возникали вопросы, а не примкнуть ли к команде FreeBSD developers. Нужно отдать должное Linus за его решительность к таким серьезным (но необходимым) изменениям в стабильной ветке.

После такого поворота событий и включения нового VM кода от Andrea требуется немало времени для "затирания швов" (вопросы стабильности вышли на первый план). Используйте ядра 2.4.13+, а лучше 2.4.16+ (но не между ними) для rock-solid ext3. Код был интегрирован в ядро (без patch) начиная с версии 2.4.15-pre2. Нет оснований избегать использования 2.4.16+ ядра, с ним реализация ext3 будет полной. Когда будете читать Andrew's page (смотри Resources дальше), имейте в виду, начиная с 2.4.16 нет надобности накладывать patch на ядро (это уже сделано).

Предостережение пользователям laptops.

Ext3 имеет твердую репутацию устойчивой файловой системы, и я с удивлением узнал, что у нескольких пользователей лаптопов возникли проблемы при переходе на ext3. Был соблазн, как реакция на подобные сообщения, отказаться от использования ext3. Однако, разбираясь в причинах таких явлений, я обнаружил, что проблемы не связаны непосредственно с ext3, а были вызваны жесткими дисками лаптопов.

Кэш записи

Вы можете этого и не знать, но самые современные жесткие диски имеет нечто, называемое кэшем записи (write cache). Он используется диском для сбора ожидающих обработки операций записи. Помещая ожидающие обработку записи в кэш, встроенное программное обеспечение диска может переупорядочивать и группировать их так, чтобы они были записаны на диск самым быстрым из возможных способов. Кэш записи с такой позиции очень полезная вещь.

К сожалению, некоторые диски лаптопов имеют сомнительную возможность игнорирования любого "официального" ATA-запросаt с требованием сброса на диск их кэша. Возразить нечего, такая "замечательная" особенность до недавнего времени не была запрещена ATA спецификацией. При взаимодействии с такими типами дисков у ядра нет возможности гарантировать, что специфический блок был "фактически" сброшен на диск. Хотя это необходимая причина вдруг возникшей проблемы с нарушением целостности данных, но еще не достаточная.

Ситуация оказалась еще хуже. Некоторые современные laptop hard drives имеют еще более "вредную" привычку без команды сбрасывать свой write cache, когда система перезагружается или "засыпает". Если hard drive наделен обеими features, а файловая система поддерживает журнализацию, происходит периодическое разрушение данных и нельзя ничего предпринять для предотвращения этого.

Где решение? Если вы имеете лаптоп, действуйте осторожно. Сохраните важные файлы перед внесением больших изменений в файловую систему. Если возникнут проблемы с нарушением целостности данных после перехода на ext3, возможно причина в "продвинутости" вашего диска. В таком случае можно войти в контакт с изготовителем диска ваего лаптопа по вопросу о его замене. Есть надежда, что уже в ближайшее время эти диски уйдут с рынка (или переместятся на рынки третьих стран - прим. переводчика) и о проблеме можно будет забыть.

Теперь, после испуга, вы готовы к обсуждению различных ext3 опций journaling данных.

Опции журналирования и производительность

Ext3 предлагает на выбор три режима журналирования при монтировании файловой системы: data=writeback, data=ordered и data=journal.

Для указания режима журналирования можно добавить соответствующую строку (например, data=journal) в поле опций записи в /etc/fstab или непосредственно в командной строке указать -o data=journal при вводе команды mount. Для указания метода журналирования на корневой файловой системе (по умолчанию data=ordered) можно использовать специальнуюопцию загрузки ядра, называемую rootflags. Например, для указания монтирования корневой файловой системы в режим полного журналирования данных, добавьте rootflags=data=journal в строку опций загрузки ядра.

Режим data=writeback

В режиме data=writeback, файловая система ext3 не выполняет какого либо журналирования данных. С подобным видом журналирования вы имеете дело в файловых системах XFS, JFS и ReiserFS (журналирование только метаданных). Как объяснялось впредыдущих статьях, это не защитит от разрушения данные в обновляемых файлах в случае неожиданной перезагрузки. Несмотря на этот недостаток, режим data=writeback обеспечивает самую высокую производительность ext3 при всех условиях.

Режим data=ordered

В режиме data=ordered файловая система ext3 "официально" журналирует только метаданные, но логически метаданные и блоки данных группируются в единый модуль, называемый транзакцией (transaction). Перед записью новых метаданных на диск, связанные блоки данных записываются первыми. Режим data=ordered эффективно (хотя без гарантии) решает проблему c разрушением данных, свойственную режиму data=writeback и большинству других журналируемых файловых систем. Заметьте, делается это без полного журналирования данных. По производительности следует заметить, что data=ordered в ext3 работает несколько медленнее data=writeback, но заметно быстрее полного журналирования данных.

Что касается гарантии от разрушения данных. При добавлении данных в конец файла режим data=ordered гарантированно обеспечивает целостность (как при полном журналировании). Однако если данные в файл пишутся поверх существующих, то есть вероятность перемешивания "оригинальных" блоков с модифицированными. Это результат того, что data=ordered не отслеживает записи, при которых новый блок ложится поверх существующего и не вызывает модификации метаданных. В режиме data=ordered порядок записи отслеживается только до попадания в кэш жесткого диска. Такое ограничение не должно огорчать пользователей, так как операция добавления в конец файла более обычна, чем наложение записи. По этой причине режим data=ordered хорошая альтернатива для режима full data journaling.

Режим 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 стали более производительными.

data=journal tweaks

Сообщалось о специфической проблеме при использовании ext3 в режиме data=journal на нагруженных серверах и нагруженных NFS серверах в частности. Каждые тридцать секунд сервер испытывает "шторм записей" на диск, прекращая реагировать на все остальное. Если вы столкнулись с такой проблемой, ее можно устранить. Введите следующую команду (с привилегиями root) для "подстегивания" Linux's dirty buffer-flushing algorithm:

Tweaking bdflush
echo 40 0 0 0 60 300 60 0 0 > /proc/sys/vm/bdflush

Такая настройка bdflush заставит kupdate выполняться каждые 0.6 секунд, а не через 5 секунд (по умолчанию). Кроме того, ядру сообщается необходимость сброса на диск содержимого буфера через 3 секунды, а не через 30 (значение по умолчанию). Регулярно и часто сбрасывая на диск недавно измененные данные, можно избежать затяжных "штормов записи". Помните, это снизит эффективность работы (особенно при небольшой загрузке системы), так как у ядра будет меньше возможностей для объединения операций записи. Нагруженному серверу снижение эффективности не грозит, а интерактивность будет улучшена.

Заключение.

Об ext3 хватит. Приглашаю к чтению моей следующей статьи, поскольку речь пойдет о многих чудесах ... XFS!

Новости мира IT:

Архив новостей

Последние комментарии:

Группа ЕСН купила РБК (1)
Monday 19.06, 11:46
Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...