Авг 11 2011

e4rat

Published by

Львиную долю времени загрузки Linux-дистрибутива занимает загрузка файлов, необходимых для работы различных системных сервисов. Она происходит последовательно и индивидуально для каждого приложения или системного демона, что снижает общую производительность компонентов системы инициализации. Вместо того, чтобы отработать и отдать управление следующему компоненту, им приходится тратить время на ожидание. Современные системы инициализации, такие как Upstart и Systemd, частично решают эту проблему с помощью параллельного запуска компонентов системы, так что пока один компонент загружается в память, другой может спокойно работать. Кроме того, для ускорения загрузки используются инструменты под названием readahead (Fedora) и ureadahead (Ubuntu), которые составляют список используемых во время инициализации ОС файлов, и заблаговременно загружают их в память во время инициализации. Все это позволяет существенно сократить время загрузки операционной системы

e4rat («Ext4 — Reducing Access Times») перемещает файлы, задействованные во время инициализации системы, в одну область диска, оптимизируя работу механизма упреждающего чтения файловой системы Ext4. Он состоит из трех компонентов:

  1. e4rat-collect запускается во время «обучающей» загрузки ОС и составляет список нужных для инициализации ОС файлов.
  2. e4rat-realloc перераспределяет блоки файлов, попавших в список так, чтобы они располагались в одной области жесткого диска.
  3. e4rat-preload заранее помещает файлы в память для ускорения загрузки (это аналог ureadahead, он также способствует ускорению загрузки, но совсем не обязателен для применения

Для работы эти компоненты требуют, чтобы ОС была установлена на файловую систему Ext4, так как только она поддерживает онлайн-дефрагментацию (начиная с ядра версии 2.6.31). При этом вариант с конвертированной Ext3 не пройдет, ФС должна быть создана, что называется, с нуля.

Пакет e4rat можно собрать из исходников или установить штатный пакетным менеджером. Заметьте, что e4rat конфликтует с ureadahead.

e4rat-collect
Для сбора информации нужно добавить строку init=/sbin/e4rat-collect в параетрмы загрузке ядра в /boot/grub/menu.lst (grub legacy) или /boot/grub/grub.cfg (grub2). e4rat-collect будет собирать статистику ровно 2 минуты, все файлы, которые будут загружены за это время, попадут в список /var/lib/d4rat/startup.log, который будет использован для переразмещения этих файлов в одну область диска. Время сбора статистики можно изменить в файле /etc/e4rat.conf.

Теперь нужно перезагрузиться, чтобы e4rat мог собрать статистику. Завершить сбор статистики можно командой

e4rat-collect -k

или

pkill e4rat-collect

После окончания работы e4rat-collect собранные данные можно посмотреть в файле /var/lib/e4rat/startup.log и в случае необходимости вручную подкорректировать его. init=/sbin/e4rat-collect из параметров загрузки ядра можно убрать.

e4rat-realloc

Далее необходимо перейти в runlevel 1, чтобы запустить e4rat-collect:

# init 1

Авторизуемся и вводим команду:

e4rat-realloc /var/lib/e4rat/startup.log

Теперь начнется перемещение блоков файлов из сформированного в прошлом шаге списка.
Оно может продолжаться достаточно долго, поэтому терпеливо ждем и ни в коем случае не прерываем этот процесс (иначе потеряем файлы).

e4rat-preload
В параметры загрузки ядра нужно добавить init=/sbin/e4rat-preload. Данная функция схожа с readahead.

Ссылки:
http://e4rat.sourceforge.net/
http://execbit.ru/2011/05/11/e4rat/
http://wiki.archlinux.org/index.php/E4rat

One response so far

One Response to “e4rat”

  1. KosmiK2001on 07 Сен 2011 at 09:59

    Интересно, а что будет e4rat-collect если /[usr|opt|var] в squashfs пожаты?

Trackback URI | Comments RSS

Leave a Reply


*

Powered by WordPress