Improving performance (Русский)/Boot process (Русский)
Улучшение производительности загрузки системы уменьшает время ожидания загрузки, а также служит способом изучения взаимодействия определённых системных файлов и скриптов друг с другом. В этой статье сделана попытка собрать воедино методы ускорения загрузки системы Arch Linux.
Анализ процесса загрузки
С помощью systemd-analyze
В состав systemd входит инструмент systemd-analyze , который можно использовать для просмотра информации о времени загрузки, в том числе svg-график с отображением юнитов, ожидающих запуска своих зависимостей. Вы можете увидеть, какие юниты вызывают замедление процесса загрузки, и попытаться оптимизировать их запуск.
Чтобы узнать, сколько времени было потрачено в пространстве ядра и пространстве пользователя при загрузке, просто используйте:
Просмотр списка запущенных юнитов, отсортированного по времени, которое потребовалось каждому из них для запуска:
В некоторых местах загрузка не может продолжаться, пока не произойдёт успешное выполнение какого-то юнита. Чтобы узнать, какие юниты оказываются в этих критических местах цепочки загрузки, выполните команду:
Также можно создать создать SVG-файл, который демонстрирует процесс загрузки в графическом виде, подобно Bootchart:
Смотрите systemd-analyze(1) для более подробной информации.
С помощью bootchart2
Также можно использовать Bootchart2 для визуализации процесса загрузки.
Использование хука systemd
По умолчанию в конфигурации mkinitcpio для сборки initramfs используются хуки base и udev . Для более быстрой загрузки их можно заменить на systemd .
Смотрите mkinitcpio (Русский)#Доступные хуки для более подробной информации. Также смотрите fsck (Русский)#Проверка при загрузке в случае замены хука fsck .
Компиляция собственного ядра
Компиляция своего ядра может сократить время загрузки и использование памяти, хотя со стандартизацией 64-битной архитектуры и модульной природой ядра Linux улучшение может оказаться не таким значительным. Смотрите Ядро#Компиляция для более подробной информации.
Initramfs
Самый простой способ уменьшить размер initramfs — добавить хук autodetect в настройках mkinitcpio. Более сложные методы уменьшения размера описаны в статье Minimal initramfs.
В зависимости от вашего оборудования (процессора и скорости хранилища), использование lz4 вместо используемого по умолчанию алгоритма сжатия zstd может оказаться быстрее, поскольку более высокая скорость декомпрессии при загрузке обычно компенсирует немного больший размер initramfs, который приходится считывать с диска. Смотрите раздел mkinitcpio (Русский)#COMPRESSION.
Выбор оптимального способа запуска служб
Одной из центральных особенностей systemd является активация через D-Bus и сокеты. Это предпочтительно в большинстве случаев, поскольку позволяет службам запускаться только при первом обращении к ним, что, как правило, хорошо (например, включение службы cups.service во время загрузки обычно не особо полезно для настольных систем, вместо него лучше включить cups.socket , который будет запускать службу, только когда потребуется что-то распечатать).
Однако если вы точно знаете, что какая-то служба (например, upower ) всегда будет запускаться во время загрузки, то общее время загрузки можно уменьшить, запустив её как можно раньше. Для этого можно включить службу, например upower.service (если файл службы настроен для этого, что в большинстве случаев так и есть).
Это заставит systemd запустить UPower как можно раньше, не вызывая гонок с активацией сокета или D-Bus.
Последовательная раскрутка дисков
Некоторые диски поддерживают последовательную раскрутку (staggered spin-up): ОС проверяет интерфейсы ATA последовательно, что позволяет раскручивать диски по одному и таким образом снижать пиковое энергопотребление. Это замедляет скорость загрузки, а на большинстве домашних компьютеров вообще не даёт никаких преимуществ, поскольку диски уже раскручиваются сразу после включения питания. Чтобы проверить, используется ли SSS:
Если не используется, то эта команда ничего не выведет.
Для отключения добавьте параметр ядра libahci.ignore_sss=1 .
Монтирование файловых систем
Благодаря хуку fsck в mkinitcpio можно избежать дорогостоящего перемонтирования корневого раздела, изменив ro на rw в параметрах ядра: опции монтирования можно задать через rootflags=rw,другие_опции . Запись должна быть удалена из файла /etc/fstab , иначе служба systemd-remount-fs.service будет продолжать попытки применения этих настроек. В качестве альтернативы можно попытаться замаскировать этот юнит.
Если в качестве корневой файловой системы используется Btrfs, то нет необходимости в выполнении fsck при каждой загрузке, как в других файловых системах. В этом случае можно удалить хук fsck . Вы также можете замаскировать службу systemd-fsck-root.service или запретить ей выполнять проверку корневой файловой системы с помощью параметра ядра fsck.mode=skip . Без fsck systemd всё равно будет выполнять проверку всех соответствующих файловых систем через systemd-fsck@.service .
Из /etc/fstab можно удалить записи для тех точек монтирования, которые systemd монтирует сам с использованием своих юнитов (список таких юнитов можно посмотреть с помощью команды pacman -Ql systemd | grep ‘\.mount$’ ). Например, нередко пользователи по старой привычке добавляют запись для монтирования /tmp , как делали во времена sysvinit, но сегодня в этом нет необходимости, так как systemd-юнит tmp.mount уже позаботился об этом. Следовательно, такую запись можно смело удалить.
Другие файловые системы, такие как /home или системный раздел EFI, могут быть смонтированы с помощью отредактированных mount-юнитов. Добавление noauto,x-systemd.automount к опциям монтирования будет буферизировать весь доступ к этому разделу, а также будет выполнять проверку и монтировать его в момент первого обращения, таким образом уменьшая количество файловых систем, которые нужно проверять/монтировать в процессе загрузки.
- Это изменит тип файловой системы /home на autofs , который mlocate по умолчанию игнорирует. В зависимости от системы, ускорение от отложенного монтирования /home может составлять около секунды-двух, так что, возможно, это не стоит того.
- Если система установлена в подтом btrfs (то есть корневой каталог / сам по себе является подтомом), а /home находится на отдельной файловой системе, вы можете захотеть предотвратить создание подтома /home . Замаскируйте tmpfiles-настройку home.conf : ln -s /dev/null /etc/tmpfiles.d/home.conf .
Уменьшение вывода во время загрузки
На некоторых системах, особенно с SSD, узким местом процесса загрузки может оказаться медленный TTY, поэтому меньший объём выводимого в консоль текста означает более быструю загрузку. Смотрите статью Тихая загрузка для более подробной информации.
Изменение загрузчика
Изменение загрузчика (например, на более простой, такой как systemd-boot), может сэкономить несколько секунд.
Если есть возможность использовать EFISTUB, это сэкономит ещё больше времени.
Ждущий режим
Лучший способ сократить время включения системы — не выключать её вообще. Попробуйте вместо выключения использовать ждущий режим.
Как ускорить загрузку в Linux
Нет ничего более раздражающего, чем сидеть перед компьютером и ждать, пока он загрузится и мы сможем с ним взаимодействовать. Есть много причин, по которым Linux компьютер может необъяснимо продлить время запуска , несмотря на то, что это гораздо более легкая операционная система, чем Windows. У этой проблемы есть несколько очень простых решений, решения, которые мы покажем вам ниже.
Большинство решений, которые мы предлагаем в этой статье, могут быть реализованы любым пользователем, независимо от его уровня знаний о Linux, а некоторые требуют небольших финансовых вложений.

Замените жесткий диск на SSD
Первый метод, который мы показываем вам для ускорения загрузки Linux и который также действителен для любой другой настольной операционной системы, заключается в замене механического жесткого диска (HDD) твердотельным диском (SSD). Механические жесткие диски, как следует из названия, используют дискообразный механизм, на котором размещена игла, отвечающая за считывание всей информации. Работа очень похожа на работу поворотного стола.
Однако твердотельные накопители хранят всю информацию в запоминающем устройстве, аналогичном картам памяти, поэтому скорость как чтения, так и записи намного превосходят механические приводы . Если наши потребности в пространстве не очень высоки и мы полагаемся на платформу облачного хранилища, мы можем купить твердотельный накопитель емкостью 256 ГБ чуть менее чем за 30 евро.
Уменьшить время ожидания GRUB
Если мы используем Linux и Windows на одном компьютере, через несколько секунд после запуска компьютера первое, что появляется, — это GRUB, селектор загрузки, который позволяет нам выбрать, какую операционную систему мы хотим использовать на компьютере в любое время. Если мы не выберем какую-либо операционную систему, через определенное время, 10 секунд, автоматически запустится версия Linux, которую мы установили на компьютер.
Если мы обычно нажимаем кнопку питания на нашем компьютере и начинаем что-то делать, пока он загружается, ожидая, пока GRUB автоматически загрузит Linux по истечении установленного времени, мы можем сократить это время до 2 секунд , Например. Чтобы изменить время ожидания GRUB, мы будем использовать команду
sudo nano /etc/default/grub
Мы вводим пароль нашей учетной записи и изменяем GRUB_TIMEOUT раздел, чтобы установить количество секунд, которое требуется для запуска выбранной операционной системы. Наконец, мы сохраняем изменения.
Увеличение скорости работы Ubuntu
Эти инструкции будут полезны для оптимизации процесса загрузки, его ускорения, а также общей оптимизации и ускорения системы.
Оптимизация загрузки Ubuntu
Оптимизация начальной загрузки
В Ubuntu по умолчанию установлена утилита readahead , которая позволяет ускорить загрузку системы. Для того чтобы эта утилита давала максимальный эффект, рекомендуется время от времени загружать систему с параметром profile , который обновляет кэши readahead. Чтобы сделать это, надо во время загрузки компьютера зайти в меню GRUB, зажав Shift при включении компьютера, затем выбрать строку c названием Ubuntu и нажать кнопку E для редактирования параметров загрузки. В появившемся тексте найдите строку вида 1)
и добавьте слово profile в конец строки (не забудьте поставить пробел перед profile). Для загрузки системы нажмите Ctrl + X или F10 . С этой опцией система будет загружаться дольше обычного, так как будет производиться сбор информации. После полной загрузки нужно еще раз перезагрузиться.
Эти действия обновляют информацию о всех используемых на этапе загрузки библиотеках и утилитах в файле /etc/readahead/boot, а в /etc/readahead/desktop — информацию о загрузке десктоп окружения. При следующей загрузке сервис readahead, при помощи программы /sbin/readahead-list, загрузит библиотеки и программы, упоминающиеся в индексе, в page cache, что немного уменьшит время загрузки.
Оптимизация файловой системы
Отключение журнала для корневого раздела
Откройте терминал, введите:
Найдите следующую после комментария похожего на «/ was on /dev/sda2 during installation« строку и приведите ее к виду
Теперь введите следующую команду в консоли:
и приведите строку
к следующему виду
Обновите конфигурацию загрузчика:
Если у вас раздел отформатирован в одну из файловых систем из семейства Ext выполните следующую команду:
Помните, что название вашего раздела с корневой системой может отличатся от /dev/sdb2.
Параметры для Ext4 для обладателей Источником Бесперебойного Питания (ИБП)
Параметры для btrfs для обладателей Источником Бесперебойного Питания (ИБП)
Отключение ненужных служб (демонов)
Де́мон (англ. daemon) — в системах класса UNIX — служба, работающая в фоновом режиме без прямого общения с пользователем. Демоны обычно запускаются во время загрузки системы. Типичные задачи демонов: серверы сетевых протоколов (HTTP , FTP, электронная почта и др.), управление оборудованием, поддержка очередей печати, управление выполнением заданий по расписанию и т. д. В зависимости от задач, выполняемых компьютером, некоторые из этих демонов можно отключить и, таким образом, сэкономить на времени запуска системы и уменьшить нагрузку на систему во время работы. Для этого воспользуемся утилитой sysv-rc-conf. Утилита эта консольная, но очень проста и интуитивно понятна, поэтому использовать ее могут даже люди с паническим страхом терминала. Установка:
В терминале получаем следующее:
Управление осуществляется несколькими клавишами: Пробел — ставим/убираем крестик, + — — остановка/запуск процесса, Q — выход.
Цифры в верхей строчке — это уровни выполнения. Для отключения сервиса, надо просто убрать крестик со всех уровней.
Отключение ненужного в автозагрузке
Начиная с версии 11.10 все системные программы в автозагрузке скрыты директивой NoDisplay. В окне «Автозапуск программ» отображаются только программы, добавленные пользователем. Для отображения всех программ, надо ввести в терминале команду:
Получим вот такое:
Теперь осталось аккуратно отключить то, что не используется и перезагрузиться. На скриншоте ненужные мне программы и сервисы уже отключены.
Для возвращения окна «Автозапуск программ» в исходное состояние, можно воспользоваться командой:
Системная оптимизация
Настройка Swappiness
Изменим поведение 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. В консоли введите следующую команду:
Добавьте строку в конец файла:
При этом «агрессивность» swap опредиляется несколькими праметрами
swapiness — определенный парамет (или системой или переопределен пользователем vm.swappiness)
distress — сколько раз ядро пыталось освободить память (каждый раз повышается на 1, изначальное число 0)
mapped_ratio — процент занятой оперативной памяти
swap_tendency — если число 100 и более, то система будет свопить (второе ограничение — остаток свободной памяти менее 64МиБ)
Система еще не свопила перед этим, swappiness установлен по дефолту 60. То есть система первый раз засвопит при достижении значения свободной памяти в 80%
Соответственно, с этим параметром стоит быть предельно осторожным, так как и увеличение и уменьшение параметра может привести к значительному замедлению системы.
vm.swappiness = 100 замедление может быть заметно сразу
0 проявятся «жуткие» тормоза в процессе использования системы, особенно под нагрузкой
Параллельная загрузка
найдите CONCURRENCY=none и замените на:
Сохраните и перезагрузите компьютер.
В Linux большинство программ используют протокол IPv4 для подключения к интернету. В Ubuntu IPv6 включен по умолчанию, отключим его, если он вызывает проблемы в сети:
Найдите параметр GRUB_CMDLINE_LINUX_DEFAULT и аккуратно дополните значением ipv6.disable=1 Сохраните изменения. Вызовите
для применений изменений, перезагрузите компьютер.
Ускорение запуска программ, с помощью preload
Preload – демон, который собирает информацию о наиболее часто используемых программах, и кэширующий их и используемые ими библиотеки, что приводит к повышению скорости загрузки программ. Для установки нужно просто выполнить в терминале
или запустить Центр приложений Ubuntu, найти в нем preload и установить его. После установки preload перезагрузите компьютер и выполните в консоли команды
Проверить работу Preload можно посмотрев содержимое preload.state
Если файл не пуст, значит демон работает.
Настройки preload по умолчанию подходят большинству, поэтому изменять что-либо в файле /etc/preload.conf не обязательно.
Кеширование символьных таблиц
Создайте пустой каталог
Ваши Qt/GTK программы будут чуток быстрее стартовать и потреблять меньше памяти, благодаря тому, что libX11 будет создавать в
/.compose-cache кеши распарсенной информации и использовать ее повторно.
Оптимизация DE
Ускорение GNOME 2
сохранить в своем «домашнем» каталоге под названием .gtkrc-2.0 (не забыть про лидирующую точку) и перегрузить иксы.
поставить галочку reduced_resources
убрать галочку enable_animations
убрать галочку accessibility.
Установить текстовый параметр в значение panel-speed-fast, для ускорения анимации панели. Перезапустить сессию Gnome.
Ускорьте загрузку Linux, отключив ненужные службы
Все больше и больше операционных систем раздуваются множеством служб, работающих в фоновом режиме. Хотя он может не использовать много процессорного времени, он увеличивает время загрузки и использование ОЗУ.
Некоторые дистрибутивы Linux включают «все, кроме кухонной раковины», чтобы облегчить жизнь пользователя. Благодаря этому такие вещи, как совместное использование файлов или печать, работают прямо из коробки. К сожалению, единственный способ сделать это — включить сотни утилит, чтобы каждый нашел то, что ему нужно.

К счастью, операционные системы с открытым исходным кодом дают вам возможность и свободу делать то, что вы считаете нужным. Это означает, что вы можете отключить все, что вам не нужно, или просто удалить это. Здесь будет рассмотрен первый вариант, как отключить службы. Когда вы отключаете компоненты вместо их удаления, риски поломки компонентов постоянно снижаются. И вы можете вернуться к тому, как это было раньше, просто повторно включив службу, если вы заметили что-то полезное, что перестало работать.
Анализируйте время, необходимое для загрузки каждой службы
Большинство операционных систем на базе Linux перешли на Systemd. Среди набора утилит, которые они включают, есть программа, позволяющая анализировать скорость работы системы. В частности, он показывает общее время, необходимое для загрузки, и время, необходимое для загрузки каждой службы. Обратите внимание, что некоторые службы загружаются параллельно. Следовательно, если для загрузки необходимы две секунды, а остальные три секунды, это не обязательно означает, что всего требуется пять секунд. Может быть, намного меньше.
Откройте эмулятор терминала и введите эту команду:

Это показывает, сколько времени требуется ядру Linux и службам платформы для загрузки, что означает, что не объясняет, сколько времени требуется графическому интерфейсу для загрузки. Чтобы объяснить это по-другому, здесь показано количество времени, необходимое с момента загрузки ядра до его сброса на консоль Linux, которая выглядит так, как показано ниже.

Если у вас не установлен графический интерфейс, он будет отображаться на экране.
Однако вы также можете увидеть необходимое время через графический интерфейс инициализации с помощью этой команды:

Это показывает, что графический интерфейс был загружен за 2.126 секунды. Это не учитывает время, необходимое для загрузки утилит рабочего стола. Чтобы включить / отключить их, запустите диспетчер запуска среды рабочего стола.
Наконец, возможно, наиболее полезными для целей этого руководства являются:

Вы можете перемещаться по меню, используя клавиши со стрелками или же СТРАНИЦА ВВЕРХ و ЛИСТАТЬ ВНИЗ. Нажмите q из.
Используйте systemctl для отключения Ненужные услуги
Как вы можете видеть на предыдущем изображении, для загрузки службы snapd требуется 1.295 секунды. На SSD это незначительно. Но на жестком диске такое время может составлять порядка нескольких секунд, и в конечном итоге они будут очень значительными. Кроме того, на SSD многие вещи загружаются параллельно с невероятной эффективностью. На HDD очень сложно загружать сервисы параллельно. Считывающие головки, плавающие на пластинах диска, должны перемещаться из одного сектора в другой, поэтому параллельное чтение данных невозможно.
Чтобы упростить это, представьте себе следующее: если на вашем твердотельном накопителе вы видите пять сервисов, для которых требуется один раз для запуска, общее время, необходимое для загрузки всех этих сервисов, вероятно, будет меньше 1.2 секунды. Если на жестком диске вы просматриваете те же пять сервисов за одну секунду, общее время загрузки, вероятно, превышает пять секунд.
Допустим, вам не нужна услуга snapd , который обеспечивает доступ к снимкам состояния приложений, сохраненным в контейнерах. Вы можете отключить его с помощью этой команды:
Но, если вы перезапустите, вы заметите, что оснастки Демон все еще работает. Это потому, что другие зависимости могут включить его, даже если он отключен. Попробуйте посмотреть, что это может быть:

snapd.seed.service و сокет Они здесь виноваты. Дочерняя служба может запускать собственную родительскую службу. Когда вы отключаете один из них, вы просто говорите ему, чтобы он не запускался автоматически сам по себе. Но есть мощный способ обойти эту проблему.
использовать systemctl Чтобы скрыть сервис
Это в основном делает служебный файл нуль Чтобы приложения не нашли способ запустить службу.
В большинстве случаев отключить услугу несложно. Этот пример был выбран, чтобы показать вам, как справляться с более сложными сценариями. В этом случае его необходимо отключить. snapd.seed.service و сокет или также скрыть это.
Ниже показано улучшенное время загрузки.

Заключение
Начиная с 4.078, время выполнения было уменьшено до 3.452 секунды, что на
15% меньше. Неплохо, учитывая только одну услугу, и это на SSD. На жестком диске легче получить более значимые результаты.
В этом конкретном примере больше сервисов можно отключить с помощью такой команды, как:
sudo systemctl mask avahi-daemon.service ModemManager.service thermd.service pppd-dns.service.
Если вы предпочитаете графическое приложение для управления вашими услугами, вы можете взглянуть на Системный менеджер проекта. Однако он будет ограничен в том, что вы можете с ним делать, поскольку командная строка предлагает большую гибкость.