Авторские статьи

Ускорение ext4 с помощью lazytime в Linux 4.0.


Вышло ядро Linux версии 4.0, под кодовым именем "Hurr durr I’m a sheep". Линус Торвальдс назвал его лучшим шансом сменить цифру 3 и просит не ждать в нём больших изменений. Они есть, но реально крупные новшества придут с ядром 4.1. Но для нас пользователей наиболее интересной является опция lazytime.

Сначала давайте вспомним, что у каждого файла есть 3 отметки времени (timestamp):

  • ctime - обновляется при обновлении атрибутов файла, таких как смена владельца, или при перемещении файла в другую ФС.
  • mtime - обновляется при изменении содержимого файла.
  • atime - обновляется при доступе к файлу, при его открытии или операциях типа grep, sort, cat, head, tail и другие.

Ctime и mtime считаются полезными, а вот atime справедливо считается накла́дной операцией по сравнению с выгодами что она даёт. В современных linux дистрибутивах есть опция монтирования relatime, которая сглаживает ситуацию с atime, но вносит свои проблемы. Новая опция lazytime призвана заменить relatime и исправить ситуацию с atime.

Что не так с atime? Atime вынуждает обновлять её при каждом доступе к файлу, а это означает, что inode файла нужно изменять на медленном дисковом устройстве. Другими словами, каждое чтение файла превращается в запись. Влияние на общую производительность системы может быть очень серьёзным!

Очень давно многие линуксоиды любили монтировать разделы с параметром noatime и "отключали" atime навсегда. Но проблема в том, что есть несколько программ, которые без atime работают неправильно. Классическим примером являются некоторые консольные почтовые клиенты, которые используют atime для определения необходимости перечитать ящик-файл после доставки почты.

Разработчики ядра после обсуждений реализовали раннюю реализацию relatime и она появилась в ядре linux 2.6.20. Relatime подавлял большинство обновлений atime, но позволял обновлять atime если файл был изменен (изменились ctime или mtime) с момента последнего обновления atime. Позже relatime изменили и он позволял обновлять atime файла каждые 24 часа при доступе к нему, хотя модификации файла не было.

Relatime работает достаточно хорошо на большинстве систем, но есть те, кому нужно отслеживать atime, но без оплаты падением производительности дисковой подсистемы. Relatime при всей своей помощи в снижении нагрузки на I/O заставляет систему быть не совместимой с POSIX спецификацией. Для кого-то это очень важно. Выбор тогда был такой: atime и бо́льшая нагрузка ИЛИ relatime и его минимальные недостатки с нарушением POSIX.

Дебиан разработчик, главный мантейнер пакетов e2fsprogs, разработчик ext4 Theodore (Ted) Ts'o представил опцию lazytime. Если lazytime указана для раздела, то текущий atime файлов будет храниться в памяти (in-memory inode). Но inode не будет записана на диск, пока не появится причина или данная inode сама не будет вытеснена из памяти на диск. Теперь всем программам доступна актуальная atime файла, хотя на диске временно будет отставшая от реальности версия atime и актуальная версия в памяти, кстати, может быть потеряна при крахе системы.

Linux VFSДэйв Шиннер (Dave Chinner) указал, что предварительная реализация lazytime на уровне файловой системы ext4 не лучшее место. Lazytime следует реализовать на уровне virtual filesystem (VFS) и тогда данный функционал будет доступен всем файловым системам, а не только ext4. Тед согласился, что реализация lazytime в VFS имеет смысл и следующий патч будет ориентирован именно на этот слой. Дэйв так же указал, что в своё время было ошибочно в первых реализациях relatime не обновлять atime при изменении ctime и mtime. Потом добавили дефолтный лимит в 24 часа. Если сейчас реализация lazytime будет задерживать запись обновлений atime на неопределённый срок, то это опять шагать по тем же граблям. Тед согласился с этим и сейчас через sysctl доступен параметр dirtytime_expire_seconds. Иначе такие системы, как сервера баз данных, могли бы много месяцев не обновлять на диске atime файлов БД.

Так же интересен вопрос: сделать ли lazytime дефолтной опцией? Lazytime удовлетворяет POSIX спецификации и лучше relatime. Тед хотел бы видеть опцию lazytime по умолчанию как можно быстрее. Дейв опасается регрессий в VFS. Самый лучший расклад для всех - какой-нибудь дистрибутив Linux, который ориентирован на новинки и продвинутых пользователей, первым обкатал бы фичу и вскрыл проблемы, если они имеются.

Дополнительные материалы:
Ускорение файловой системы.
Оптимизация виртуальных серверов.
Btrfs в Ubuntu.
ZFS в Ubuntu.
Резервное копирование разделов с CloneZilla.
Доступ к разделам ext4, ext3, ext2 из-под Windows 7 и XP.

Дата последней правки: 2015-05-27 09:24:17

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта