В этой заметке я опишу две утилиты, которые помогут ускорить работу системы Linux, а конкретно — запуск приложений: prelink и preload. Prelink оптимизирует исполняемые файлы для быстрого связывания с библиотеками. Preload кэширует часто используемые библиотеки и программы.
Prelink
Большинство приложений в Linux используют динамически загружаемые библиотеки, которые содержат различные функции, необходимые для их работы. При каждом запуске приложения должны быть также загружены эти библиотеки. В случае тяжелых приложений, имеющих большое количество связей, этот процесс может занять определенное время. При этом выполняемые для связывания библиотек действия одинаковы, если сами библиотеки не меняются. Утилита prelink позволяет прописать связи с библиотеками непосредственно в исполняемый файл, что ускорит запуск приложения. Выполняется это без перекомпиляции приложений.
Установите приложение prelink средствами вашего дистрибутива. В файле /etc/prelink.conf содержится список путей, файлы по которым prelink будет обрабатывать. Модифицировать этот список вам скорее всего не придется, это за вас сделали авторы вашего дистрибутива. Запустите prelink -amfR (--all --conserve-memory --force --random) для выполнения прелинкинга всех приложений.
Описание опций:
-a — All, применить предварительное связывание ко всем выполняемым файлам. -m — Сохраняет пространство виртуальной памяти. Это требуется, если вы имеете много библиотек, которые необходимо связать. -f — Вынуждает повторить предварительное связывание для файлов, которые уже подвергались ему. Это необходимо, т.к. программа prelink прекращает обработку существующих старых связанных файлов, зависимые библиотеки которых могли измениться. -R — Random, выбирает случайный порядок адресов, это увеличивает безопасность против атак переполнений буферов.
Учтите, что запускать prelink необходимо после каждого обновления библиотек и/или приложений. Можно назначить его на запуск по cron.
Preload
Preload — демон, собирающий информацию о часто используемых программах и библиотеках и кэширующий их в памяти для быстрого запуска. Соответственно нерационально использовать его, если у вас мало оперативной памяти. Настройки находятся в файле /etc/preload.conf. Стандартные значения скорее всего вам подойдут, однако я приведу описание основных опций:
model.cycle — как часто preload будет получать от системы данные об используемых программ и библиотек. model.halflife — как часто preload будет сбрасывать старую информацию. model.minsize — ограничение на размер программы или библиотеки, которую preload будет обрабатывать.
В файле /var/lib/preload/preload.state можно увидеть информацию о работе preload.
Тестирование
При помощи утилиты time делались пять замеров выполнения команды «php -v» с интервалом в пару секунд. Сначала пять замеров без оптимизаций, затем была запущена утилита prelink, проведены пять замеров. Наконец, был запущен демон preload, после появления php в кэше preload были снова проведены пять замеров. Результаты отображены на графике (цифры — миллисекунды):
Конфигурация программы храниться в файле /etc/preload.conf, стандартные значения должны подойти большинству пользователей. Но если вы хотите настроить все по своему, милости просим. Ниже описаны самые основные настройки, подробности, как всегда в документации или в статье, написанной разработчиком Preload.
Опция / Значение по умолчанию / Описание model.cycle / 20 [секунд] / Как часто Preload будет опрашивать систему на предмет используемых программ и библиотек.
model.halflife / 168 [часов] / Как часто Preload будет забывать старую, накопившуюся информацию. Каждый раз, накопленная статистика будет терять 50% своего значения.
model.minsize / 2000000 [байт] / Нечто вроде ограничения на размер программы или библиотеки, на которую будет Preload обращать внимание. Если вы хотите, чтобы кешились мелкие программки — уменьшите значение, только для крупных, соответственно увеличьте это значение.
Использование памяти, считается по формуле:
(Всего RAM x model.memtotal) + (RAM доступная при старте x model.memfree) + (Кеш x model.memcached)
На системе с 1Gb не рекомендую. 2-3 надо много думать. Если 4 и более, то вполне можно.
ИМХО.