Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:ubuntu_optimization [2013/09/18 04:21] [Ускорение запуска программ, с помощью preload] + prelink |
wiki:ubuntu_optimization [2018/01/10 11:59] (текущий) [Настройка Swappiness] |
||
---|---|---|---|
Строка 14: | Строка 14: | ||
В Ubuntu по умолчанию установлена утилита ''readahead'', которая позволяет ускорить загрузку системы. Для того чтобы эта утилита давала максимальный эффект, рекомендуется время от времени загружать систему с параметром ''profile'', который обновляет кэши readahead. Чтобы сделать это, надо во время загрузки компьютера зайти в меню [[GRUB]], зажав <key>S</key> при включении компьютера, затем выбрать строку c названием Ubuntu и нажать кнопку <key>e</key> для редактирования параметров загрузки. В появившемся тексте найдите строку вида((Строка может незначительно отличатся в зависимости от версии системы.)) | В Ubuntu по умолчанию установлена утилита ''readahead'', которая позволяет ускорить загрузку системы. Для того чтобы эта утилита давала максимальный эффект, рекомендуется время от времени загружать систему с параметром ''profile'', который обновляет кэши readahead. Чтобы сделать это, надо во время загрузки компьютера зайти в меню [[GRUB]], зажав <key>S</key> при включении компьютера, затем выбрать строку c названием Ubuntu и нажать кнопку <key>e</key> для редактирования параметров загрузки. В появившемся тексте найдите строку вида((Строка может незначительно отличатся в зависимости от версии системы.)) | ||
<file>linux /vmlinuz-3.5.0-26-generic root=UUID=39efddef-c527-4bd0-bde5-82278c4fdeb3 ro quiet splash $vt_handoff</file> | <file>linux /vmlinuz-3.5.0-26-generic root=UUID=39efddef-c527-4bd0-bde5-82278c4fdeb3 ro quiet splash $vt_handoff</file> | ||
- | и добавьте слово profile в конец строки (не забудьте поставить пробел перед profile). Для загрузки системы нажмите <key>C-x</key> или <key>F10</key>. С этой опцией система будет загружаться дольше обычного, так как будет поизводиться сбор информации. После полной загрузки нужно еще раз перезагрузиться. | + | и добавьте слово profile в конец строки (не забудьте поставить пробел перед profile). Для загрузки системы нажмите <key>C-x</key> или <key>F10</key>. С этой опцией система будет загружаться дольше обычного, так как будет производиться сбор информации. После полной загрузки нужно еще раз перезагрузиться. |
Эти действия обновляют информацию о всех используемых на этапе загрузки библиотеках и утилитах в файле ///etc/readahead/boot//, а в ///etc/readahead/desktop// - информацию о загрузке десктоп окружения. При следующей загрузке сервис readahead, при помощи программы ///sbin/readahead-list//, загрузит библиотеки и программы, упоминающиеся в индексе, в page cache, что немного уменьшит время загрузки. | Эти действия обновляют информацию о всех используемых на этапе загрузки библиотеках и утилитах в файле ///etc/readahead/boot//, а в ///etc/readahead/desktop// - информацию о загрузке десктоп окружения. При следующей загрузке сервис readahead, при помощи программы ///sbin/readahead-list//, загрузит библиотеки и программы, упоминающиеся в индексе, в page cache, что немного уменьшит время загрузки. | ||
Строка 146: | Строка 146: | ||
==== Настройка Swappiness ==== | ==== Настройка Swappiness ==== | ||
- | Изменим поведение Ubuntu в отношении использования ОЗУ и подкачки. Есть такой параметр vm.swappiness, который по умолчанию имеет значение 60, и контролирует процент свободной памяти, при которой начнется активный сброс страниц в раздел [[swap]]. Иными словами, при 100-60=40% занятой памяти, Ubuntu уже начнет использовать раздел swap. При большом количестве ОЗУ в компьютере, лучше изменить параметр vm.swappiness до 10 и тем самым приказать Ubuntu не использовать swap пока занятая ОЗУ не достигнет 100-10=90%. В консоли введите следующую команду:<code bash>gksu gedit /etc/sysctl.conf</code>Добавьте строку в конец файла:<file>vm.swappiness=10</file> | + | Изменим поведение Ubuntu в отношении использования ОЗУ и подкачки. Есть такой параметр vm.swappiness, который по умолчанию имеет значение 60, и контролирует, каким образом система будет работать с файлом подкачки ([[swap]]). Этот параметр может иметь следующие значения: |
- | ---- | + | ^ Значение параметра ^ Описание ^ |
+ | | vm.swappiness = 0 | Ядро будет использовать файл подкачки только в том случае, если значение свободной оперативной памяти будет меньше указанного в параметре vm.min_free_kbytes. | | ||
+ | | vm.swappiness = 1 | Для ядер версии 3.5 и выше, минимальное использование файла подкачки без его полного отключения. | | ||
+ | | vm.swappiness = 10 | Это значение часто рекомендуют для увеличения производительности при наличии достаточного объема оперативной памяти на компьютере | | ||
+ | | vm.swappiness = 60 | Значение по умолчанию | | ||
+ | | vm.swappiness = 100 | Система будет использовать файл подкачки очень интенсивно (НЕ РЕКОМЕНДУЕТСЯ, т.к. вызовет сильное замедление работы системы) | | ||
+ | При большом количестве ОЗУ в компьютере, лучше изменить параметр vm.swappiness до 10 либо до 1. В консоли введите следующую команду:<code bash>gksu gedit /etc/sysctl.conf</code>Добавьте строку в конец файла:<file>vm.swappiness=10</file> либо <file>vm.swappiness=1</file> | ||
+ | |||
+ | При этом "агрессивность" swap опредиляется несколькими праметрами | ||
+ | <code bash>swap_tendency = mapped_ratio/2 + distress + swappiness</code> | ||
+ | |||
+ | Где | ||
+ | |||
+ | **swapiness** - определенный парамет (или системой или переопределен пользователем vm.swappiness) | ||
+ | |||
+ | **distress** - сколько раз ядро пыталось освободить память (каждый раз повышается на 1, изначальное число 0) | ||
+ | |||
+ | **mapped_ratio** - процент занятой оперативной памяти | ||
+ | |||
+ | **swap_tendency** - если число 100 и более, то система будет свопить (второе ограничение - остаток свободной памяти менее 64МиБ) | ||
+ | |||
+ | Пример | ||
+ | |||
+ | Система еще не свопила перед этим, swappiness установлен по дефолту 60. То есть система первый раз засвопит при достижении значения свободной памяти в 80% | ||
+ | <code bash>100 = x/2 + 0 + 60</code> | ||
+ | |||
+ | Соответственно, с этим параметром стоит быть предельно осторожным, так как и увеличение и уменьшение параметра может привести к значительному замедлению системы. | ||
+ | |||
+ | //vm.swappiness = 100// замедление может быть заметно сразу | ||
+ | |||
+ | //vm.swappiness ~ 0// проявятся "жуткие" тормоза в процессе использования системы, особенно под нагрузкой | ||
+ | |||
+ | |||
+ | ==== Параллельная загрузка ==== | ||
<note important>Только для версии 9.04 и ниже!</note> | <note important>Только для версии 9.04 и ниже!</note> | ||
- | <note warning>Данный пункт («Параллельная» загрузка) не работает в 7.10! Страница с багом [[https://bugs.launchpad.net/ubuntu/+source/hal/+bug/149881|здесь]]</note> | + | <note warning>Данный пункт («Параллельная» загрузка) не работает в 7.10! Страница с багом [[https://bugs.launchpad.net/ubuntu/+source/hal/+bug/149881|здесь]]\\ Данный пункт ("Параллельная загрузка") не работает в 14.04! В связи с появлением upstart</note> |
* **"Параллельная" загрузка**. Если Вы имеете двухядерный процессор, или он поддерживает технологию hyperthreading - то их можно задействовать в системе. Откройте терминал и выполните команду:<code bash>gksu gedit /etc/init.d/rc</code>найдите **CONCURRENCY=none** и замените на:<file>CONCURRENCY=shell</file>Сохраните и перезагрузите компьютер. | * **"Параллельная" загрузка**. Если Вы имеете двухядерный процессор, или он поддерживает технологию hyperthreading - то их можно задействовать в системе. Откройте терминал и выполните команду:<code bash>gksu gedit /etc/init.d/rc</code>найдите **CONCURRENCY=none** и замените на:<file>CONCURRENCY=shell</file>Сохраните и перезагрузите компьютер. | ||
- | |||
Строка 160: | Строка 192: | ||
<note warning>В старых версиях Ubuntu протокол IPv6 отключается по-другому</note> | <note warning>В старых версиях Ubuntu протокол IPv6 отключается по-другому</note> | ||
- | ==== 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 ==== |