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

Странность с lazytime.


Ядро Linux с версии 4 принесло опцию lazytime на смену дефолтному relatime. Ринулся было её использовать, но столкнулся с непонятным поведением и, честно говоря, сдался. А зря.

Кратенько напомню зачем люди ломают голову про параметры к файловым системам типа noatime/relatime/lazytime. Из всех отметок времени самая интересная - atime. Ваша операционная система обновляет данную отметку времени у всех файлов, которые испытали на себе операцию открытия и чтения их содержимого. Получается, что вы "чтение" превращаете в "запись". Добавьте сюда ситуацию с новомодными SSD, которые хорошеют с каждым днём, но по-прежнему не сильно любят когда на них много пишут. В SSD, по сравнению с HDD, перезапись ячейки вынуждает перезаписывать целый блок. В любом случае, SSD или HDD, пользователи и администраторы пытались улучшить быстродействие файловой и всей системы в целом.

Очень давно многие любили отключать обновление atime через параметр noatime в /etc/fstab. Но, так скажем, noatime - это грубый способ, так как некоторые программы ориентировались на atime.

Relatime был призван более элегантно решить вопрос с обновлением atime. Relatime обновлял atime только если видел обновление отметок времени ctime (смена атрибутов) и mtime (смена содержимого). Кажется всё!? Оказалось, что relatime не совместим с POSIX спецификацией.

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

И вот тут появляется странность. Дело в том, что lazytime преподносили как некое эволюционное развитие решения проблемы с atime. Мысль работала так: была грубая опция noatime, потом реализовали relatime и вот родилась lazytime. Другими словами, ты или используешь noatime, или relatime или lazytime.

Ринулся и я лепить lazytime направо и налево везде где ядро стало старше 4 версии. И? Команда mount после рестарта показывала что параметры relatime и lazytime присутствуют ОБА одновременно! Вначале погрешил на кривые руки, потом подумал про параметр defaults, который гипотетически мог содержать в себе и relatime. Но когда убрал defaults в /etc/fstab и стал конкретно указывать у раздела что-то типа rw,lazytime и после рестарта всё равно магическим образом появлялся дополнительно relatime, стал чесать свою репу. Стыдно признаться, но вину взял на себя и забросил вопрос, плюнув на всё. Lazytime оставил где его прилепил, но на появление сладкой парочки relatime,lazytime забил болт.

Но люди стали обращаться за помощью и что ты за специалист такой, который может только развести руками и признаться в своём не понимании ситуации? Начал гуглить и нагуглил!

The lazytime flag is independent of strictatime/relatime/noatime. And the default is relatime. So when you replaced noatime with lazytime, it's not surprising that you saw the relatime mount option being set.
-- Ted Ts'o

Флаг lazytime не зависит от strictatime/relatime/noatime. И по умолчанию идёт relatime. Поэтому когда вы noatime замените на lazytime, то не удивляйтесь установленной relatime. Нуёпттвоюмать! Почему сразу во времена первых анонсов lazytime не прояснить сей момент? Lazytime это такой relatime где atime в памяти? Короче куча вопросов, а ответов нет. Нам остаётся просто не удивляться парочке relatime,lazytime и жить дальше!

Ускорение файловой системы.
Ускорение ext4 с помощью lazytime в Linux 4.0.

Дата последней правки: 2016-09-21 20:50:31

RSS vasilisc.com   


Разделы

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