Ярлыки

пятница, 4 февраля 2011 г.

Использование Readahead

Это руководство предполагает использование командной стоки для выполнения некоторых команд, и использование приложений readahead-list и readahead-watch, профилирующих загрузку. Изменения в системе легко обратимы, и худшее, что может произойти - это сокращение скорости входа в систему (какая ирония!). Конечно, с того момента, как Вы с правами root сделаете какие-нибудь изменения, ошибка в наборе некоторых команд может привести к необратимым повреждениям ПО или данных. Эти изменения не поддерживаются разработчиками Ubuntu. Вам, наверное, не следует пытаться делать это, если у вас более 512MB ОЗУ.

Часть 1: профилирование последовательности входа в систему

В первую очередь, нам нужно сделать запрос, чтобы readahead проследил последовательность загрузки системы и отметил все файлы, которые считываются в это время. Продвинутые пользователи могут указать это во время загрузки, для этого есть аргумент «profile», призванный оптимизировать загрузку Ubuntu. Нам, исключительно вручную, нужно будет сымитировать, что делает эта загрузочная опция, но сохранить вывод в разные файлы.

Для начала, давайте сохраним наш список readahead в директории «~/.readahead»:

$ mkdir ~/.readahead

Теперь завершите сеанс и нажмите CTRL+ALT+F1 для входа в терминал. Запустите профилирование:

$ sudo readahead-watch -o ~/.readahead/gnome.root /

Это загрузит Ваш диск на некоторое время (может даже на несколько минут), потом вернет командную строку. Профилирование теперь в фоновом режиме наблюдает за всеми действиями. Затем без завершения сеанса вернитесь в GDM (ALT+F8) и выполните обычный вход.

После того, как Вы полностью войдете в систему, нажмите CTRL+ALT+F1, чтобы вернуться в терминал и запустите:

$ sudo killall readahead-watch

$ sudo chown jdong:jdong ~/.readahead -R

Замените jdong:jdong на Ваши имя пользователя и группу. Теперь нужно немного сократить список. Особенно если у Вас на рабочем столе есть есть большие файлы (например 1Гб AVI файлы), последовательность загрузки может касаться и их, потому что readahead думает, что их следует загрузить в память целиком! В терминале запустите:

$ cat ~/.readahead/gnome.root | xargs -i ls -lk {} | sort -rn -k +5 | less

Это отобразит все файлы, которые readahead хочет прокешировать, отсортированные в порядке убывания размера. Пятый столбец (перед датой) показывает размер файла в КБ (килобайтах). Удостоверьтесь, что там нет очень больших файлов. Если есть размером 10 000 КБ или около того, то вероятно не стоит использовать предзагрузку. Вы можете удалить ненужные файлы из списка предзагрузки, открыв «~/.readahead/gnome.root» в любимом редакторе и удалить соответствующую строку.

Если у Вас /home расположен на отличном от root (/) разделе, Вам следует повторить Часть 1 для каждого раздела, заменяя gnome.root различными именами, и заменяя точку монтирования «/» на интересующую.

Часть 2: Подключаем все в последовательность входа в сессию

Далее нам следует сообщить Ubuntu, чтобы она выполняла readahead при каждом входе в сессию. Я собираюсь использовать «/etc/X11/Xsession.d» для этих целей, но если Вы предпочитаете другой способ выполнить предзагрузку всего, воспользуйтесь моим!

Создайте файл, называемый «/etc/X11/Xsession.d/00readahead», и впишите в него следующее:

$ for list in ~/.readahead/*; do readahead-list $list & done

wait

Сохраните файл, сейчас Вы можете перезагрузиться, чтобы проверить изменения. Вы заметите, что вход «подвис» на оранжевом экране, до тех пор, пока диск не стал работать без особой нагрузки, затем, после того как вход в сессию полностью прокеширован однажды, загрузка ускорится. Таким образом, загрузка моей системы составила 30 секунд, заметное улучшение.

Часть 3: Подключаем в последовательность загрузки

Очень часто бывает, что мы не входим немедленно, как только появляется запрос. Мы можем сходить за чашечкой кофе, или все компьютеры в лаборатории включаются до того, как придут студенты. Может иметь значение кеширование входа в сессию как часть загрузки. Откройте «/etc/rc.local» в Вашем любимом текстовом редакторе и перед строкой «exit 0» добавьте:

$ for list in /home/jdong/.readahead/*; do readahead-list $listdone

Заметьте, что Вам надо использовать свое имя пользователя здесь, сейчас мы не переносим это в фон (Мы можем, но не имеем достаточно причин для этого).

Сейчас перезагрузитесь и ждите, пока работа диска не остановится перед тем как войти. На этот раз скорость входа составила 19 секунд.

У Вас может возникнуть два вопроса по этому поводу:

1. Как много времени займет повторный вызов readahead для файлов, которые уже были однажды кешированы? Примерно 0,05 секунды на вызов readahead во второй раз с тем же списком.

2. Как много сверх времени это добавляет к загрузке, если readahead в фоне все еще выполняется и Вы пытаетесь войти? Около 2 секунд на моей конфигурации.

Заключение

В моем случае применение readahead привело к 10 секундному улучшению в скорости загрузки в худшем случае, и выдающийся двукратный прирост, когда система простаивала 2 секунды перед запросом на вход.

Это очень ценные улучшения, и они будут все лучше, если будет использована лучшая версия этих настроек в Ubuntu. Основная идея должна быть очень проста, адаптированный файл «/etc/readahead/readahead.gnome» подставляется в систему и подключается в Xsession.d скрипт.

Очень много других, долго загружающихся приложений приходит на ум, пока диск нагружен (Firefox? Openoffice? Eclipse?). Вы можете использовать похожую процедуру написав «wrapper script», который будет выполнять readahead-list при первом вызове списка, затем запустите приложение с базовыми аргументами. Мне очень интересно услышать об улучшениях, которые даст этот метод.

Отмена readahead

Удалять, удалять и удалять! Удалите директорию «~/.readahead», удалите «/etc/X11/Xsession.d/00readahead», и удалите строку, которую Вы добавили в «/etc/rc.local».


link

Комментариев нет:

Отправить комментарий