Первый и
единственный миф - что журналируемые файловые системы спасут
вас и ваши данные от любого сбоя. Нет, не спасут. Они просто
предназначены для другого.
[Олег
Бройтман ]
24 сентября 2001 состоялось третье заседание
семинара. Александр Боковой прочел лекцию
"Журналируемые файловые системы. Мифы и реальность".
Лекция была отличная. Александр и выглядит
хорошо, и умеет говорить, он не суетился возле доски, и вообще
поднял планку лекций семинара на такую высоту, что следующим
лекторам придется попотеть, чтобы допрыгнуть. :)
Александр рассмотрел 4 наиболее известные
файловые системы - ReiserFS, JFS, XFS и ext3 - однако не
вообще, а применительно к конкретной задаче - создание
высокопроизводительного надежного файлового сервера. Александр
не назвал лучшую, и я не назову - сначала дайте критерии
"лучшести". Как будет видно ниже, по разным критериям лучшие
бывают разные.
Мифов же уважаемый лектор развеял немного.
Первый и единственный миф - что журналируемые файловые системы
спасут вас и ваши данные от любого сбоя. Нет, не спасут. Они
просто предназначены для другого.
Вот, скажем, сценарий. Вы открываете файл, и
пишете в него большой объем данных. В середине записи
происходит сбой, перезагрузка, и после восстановления файл
оказывается пустой. Нулевой длины. Как же так, говорите вы, а
где же то, что я туда писал? Ответ такой - журналируемые
файловые системы ТАК не работают. Они предназначены не для
восстановления всех ваших данных любой ценой, а для
поддержания непротиворечивости метаданных файловой системы на
момент сбоя. Поэтому такая система работает так: вы открываете
файл - и он успешно открывается, файловая система отмечает
открытие в своем журнале записью транзакции. Затем вы
начинаете писать. Но файловая система не запоминает копии этих
данных. И когда происходит восстановление после сбоя,
происходит откат до последней успешной транзакции - открытия
нового пустого файла.
Следующие общие слова Александр сказал об
алгоритмах журналируемых файловых систем. Большинство из них
построено на основе сбалансированных деревьев, иначе известных
как B+ деревья.
Из четырех рассмотренных файловых систем 3
используют сбалансированные деревья.
Второй способ оптимизации журналируемой
файловой системы - вынесение журнала на другое независимое
устройство (для асинхронного доступа). Это увеличивает
эффективность системы на 30-50%! Не все из рассмотренных
систем имеют вынос журнала. XFS имеет, для ReiserFS нужен
особый патч.
В основной части лекции Александр рассказал
подробности о каждой из файловых систем.
XFS была создана в начале 90-ых (1992-1993)
фирмой Silicon Grapgics (сейчас SGI) для мультимедийных
компьютеров с ОС Irix. Файловая система была ориентирована на
очень большие файлы и файловые системы. Особенностью этой
файловой системы является устройство журнала - в журнал
пишется часть метаданных самой файловой системы таким образом,
что весь процесс восстановления сводится к копированию этих
данных из журнала в файловую систему. Размер журнала задается
при создании системы, он должен быть не меньше 32 мегабайт; а
больше и не надо - такое количество незакрытых транзакций
тяжело получить.
JFS, журналируемая файловая система фирмы
IBM, была создана для ОС AIX. В дальнейшем была перенесена на
OS/2, но проявила себя там очень вяло. Нынешняя ее версия для
Linux и то лучше. Размер журнала - примерно 40% от объема
файловой системы, но не больше 32 мегабайт. Особенностью этой
файловой системы являются "агрегаты" - в этой файловой системе
может быть несколько сегментов, включающих журнал и данные, и
каждый из таких сегментов можно монтировать отдельно.
Проект ReiserFS тоже начинался в 90-ых годах,
первый прототип носил название TreeFS. Разработчики системы
мечтают создать не только файловую систему, но вообще механизм
иерархического именования объектов. Уже есть патчи,
интегрирующие Squid с ReiserFS, аналогичный проект начался для
qmail. В этом смысле работа Ханса Райзера с коллегами
уникальна, потому что они ведут научные исследования, и
воплощают результаты в свободный код!
И, наконец, ext3. Это журналируемая
надстройка над ext2. Достоинство ее в том, что она не меняет
внутренние структуры ext2. Файловую систему ext3 можно создать
из ext2 просто запустив программу создания журнала.
Впоследствии эту файловую систему можно опять подмонтировать
драйвером ext2. А потом опять драйвером ext3, и создать
журнал.
Во второй части лекции Александр показал кучу
графиков сравнения производительности 4-ех описанных файловых
систем. Сравнение проводилось с помощью стандартного теста NetBench,
точнее, как стало понятно из лекции чуть позже, с помощью его
свободного аналога DBench. NetBench - это распределенный
клиент, который с сотни виндовых машин дает нагрузку на
файловый сервер - создает, переименовывает, пишет и читает
файлы, всего около 90 тысяч транзакций. DBench создан Эндрю
Триджелом, автором Самбы, еще когда он работал в SGI, и у него
была возможность использовать сотню виндовых машин. DBench не
является, как я понял, распределенным клиентом, а эмулирует
NetBench на одной машине, но отклонение от результатов
NetBench составляет 1%. Вполне приемлемо. DBench был создан
так - через сервер с Самбой прогнали NetBench, и Самба все
операции записала в лог.
Вот этим-то DBench'ем Александр нагрузил
файловые сервера, создавая нагрузку, эквивалентную нагрузке
NetBench от 1 до 25 клиентов. Результаты были представлены в
виде графиков падения производительности на 1 клиента в
зависимости от числа клиентов. Тестирование проводилось на
сервер самой обычной конфигурации - Celeron 800Mhz, 256M
памяти, 4 независимых IDE-контроллера; на одном Linux, на
другом тестируемая файловая система, на третьем журнал (в тех
FS, которые позволяют вынести журнал), один запасной.
Я не буду пытаться воспроизвести эти графики
здесь, возможно, Александр опубликует их отдельно. Приведу
лишь общие выводы. Вывод номер один, самый главный: на таком
железе (даже не Pentium4) файловые системы обладают такой
высокой производительностью, что забивают 100-мегабитную сеть.
То есть для того, чтобы выйти на предел, уже надо было бы
иметь гигабитный ethernet.
Теперь по отдельным файловым системам. Слабее
всех проявила себя JFS. Ее производительность с самого начала
невысокая, и падает она быстро. Зато ее падение
производительности очень гладкое; тем, кому важна не только
производительность, но и предсказуемость поведения, это важно.
Лучше себя ведет XFS. Ее производительность
на 1 клиенте выше, и падает медленнее. А при вынесении журнала
на независимый контроллер ее производительность сильно
улучшается, и она приближается к топовым показателям. Про XFS
следует отметить, что она разрабатывалась как файловая система
для больших файлов, а NetBench выполняет операции с
небольшими, поэтому можно предполагать, что на реальных
файловых серверах XFS будет вести себя еще лучше. К тому же у
этой FS тоже очень гладкий график падения производительности.
ReiserFS показал еще лучшую
производительность, но зато у него негладкое падение. Где-то в
районе 12-15 клиентов график начинает скакать вверх и вниз
довольно резко (на вопрос из зала, воспроизводимо ли такое
поведение, или это ошибка эксперимента, Александр ответил, что
графики эти выверены, и все скачки воспроизводимы). После 15
клиентов график становится более гладким, возможно, за счет
приближения к полной загрузке сети, а не файлового сервера.
Графики ext3 до такой степени мало отличаются
от ResierFS, что на сводном графике и не увидишь разницы.
Особой проблемой является то, что во время
интенсивной записи на диск файловые системы постоянно
перебалансируют свои B+ деревья. Загрузка процессора при
использовании XFS достигает 90%. ReiserFS дает 70%, потому что
оптимизирует порядок операций. Другая оптимизация ReiserFS -
она может упаковывать несколько маленьких файлов в один
дисковый блок, а совсем маленькие - просто записать в inode :)
Что касается стабильности, то наиболее
устойчивой оказалась ReiserFS, которую Александр назвал
рабочей лошадкой, на которую вполне можно положиться.
Во время лекции и после нее возникло пара
вопросов о совместимости журналируемых файловых систем с
сетевыми. То есть можно ли поверх ReiserFS поставить NFS, или
поверх XFS - Coda. Не все хорошо оказалось в этой области, но
подвижки есть. Лучше всего должны быть совместимы Coda и ext3
- у них один автор Peter Braam. :)
[Источник
Computerra
Online]
[ опубликовано 24/10/2001
]