Arch linux ускорить загрузку

Обновлено: 05.07.2024

1) Ненужные модули почти ресурсов не кушают, не более 1% от проца берут.
2) Ищет устройства и создает их.
3) Собирал с прелинком, увеличения скорости не заметил, пересобирать программы смысла нет, они и так i686.
4) Ядро лучше самому собирать, если время есть, так можно немного прироста добиться.

Вопрос по ускорению загрузки, как в Arch сделать параллельную загрузку сервисов?

А там разве initng по дефолту не работает. Я просто уже не помню, что сам делал, а что нет.
4) патчами. у меня самособранное ядро, тогда еще archck, работало немного быстрее, те памяти почему-то жрало меньше. вот искал решение одной проблемы, наткнулся на этот пост, возможно вам поможет. (на англ.) Вопрос по ускорению загрузки, как в Arch сделать параллельную загрузку сервисов?
Просто добавь перед сервисом значек @ И выглядит это примерно так в rc.conf
DAEMONS=(syslog-ng !hotplug !pcmcia network @netfs @crond @powersaved @alsa !@cups !squid kdm)

Спасибо
сделал параллельную загрузку
Ранешь грузилось все вместе с kde за минуту и 3 секунды
А теперь за минуту и 1 секунду.

KDE грузится секунд 30, вот когда его исправят тогда можно и думать об ускорении загрузки.

KDE грузится секунд 30, вот когда его исправят тогда можно и думать об ускорении загрузки.

Вот вот и я так начинаю думать. наверное надо настроить suspend или как его там и забыть о медленной загрузке.

KDE грузится секунд 30, вот когда его исправят тогда можно и думать об ускорении загрузки.

Вот вот и я так начинаю думать. наверное надо настроить suspend или как его там и забыть о медленной загрузке.

Про Udev в генту в файле rc.conf был пункт отвечающий за хранение папки dev в тарболе и его распаковки при загрузке! В арче такого не видел! Но думаю скорость загурзки уменьшилась бы секунд на 5, а то и более! И вообще мне кажеться что в арче udev работает медленно! WorkStation Ubuntu 10.10 on Fujitsu-Siemens Amilo Pro 3545 Про Udev в генту в файле rc.conf был пункт отвечающий за хранение папки dev в тарболе и его распаковки при загрузке! В арче такого не видел! Но думаю скорость загурзки уменьшилась бы секунд на 5, а то и более! И вообще мне кажеться что в арче udev работает медленно!

Это с какого?
Медленно обрабатываются udev events, которые появились в 2.6.15. Можешь поставить генту и убедиться, что там все абсолютно так же (если конечно там уже >= 2.6.15).
"Хранение _директории_ /dev в архиве" -- это вообще идиотизм, удев в любом случае все пересоздаст (ну разве что кроме /dev/null, /dev/console и /dev/tty3). Хочешь, можно подредактировать /etc/rc.sysinit, чтобы удевные события в фоне обрабатывались

(aivs @ May 30 2006, в 22:20) писал(а): KDE грузится секунд 30, вот когда его исправят тогда можно и думать об ускорении загрузки.

Советую внимательно покурить стартовый скрипт KDE: оттуда можно многое безболезненно вырезать (и разница, надо сказать, очень заметна). So long, and thanks for all the fish.

Советую внимательно покурить стартовый скрипт KDE: оттуда можно многое безболезненно вырезать (и разница, надо сказать, очень заметна).

Вопрос где курить и во что заворачивать, т.е. интересно где что лежит (стартует) и чего там ковырять

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

Но порой система инициализации выполняет много лишних задач во время загрузки, иногда некоторые сервисы ожидают загрузки других и завершаются только по таймауту через некоторое время. В таких случаях система может загружаться до нескольких минут. В этой статье мы рассмотрим как ускорить загрузку Linux, что нужно для этого настроить, что удалить. А также немного поговорим о процессе загрузки. Мы сосредоточимся на системе инициализации systemd.

Как проходит загрузка Linux

Во всех подробностях процесс загрузки Linux описан в отдельной статье, здесь же мы рассмотрим только то, что будет касаться ускорения.

На то как BIOS тестирует устройства и запускает загрузчик мы повлиять не можем. Работу загрузчика тоже ускорить не получится, можно только убрать ожидание выбора пункта меню.

Но самое интересное начинается дальше. Перед тем как начать загрузку системы ядро выполняет несколько проверок, загружает модули и так далее. Не все проверки нужно выполнять и не все модули нам нужны.

После того как ядро передало управление системе инициализации, начинается монтирование дисков. Это тоже отнимает время, лучше не использовать виртуальные разделы дисков, например, raid или lvm, да и вообще, чем меньше разделов - тем лучше. Идеальный вариант - только корневой раздел, тогда скорость загрузки linux будет максимальной. Но это очень невыгодный в плане удобства вариант, поэтому найдите золотую серединку. Перед тем как примонтировать каждый диск, система инициализации пытается проверить файловую систему на ошибки, это тоже замедляет загрузку.

Загрузка сервисов отнимает больше всего времени и больше всего работы придется проделать здесь, определить какие сервисы не нужны и отключить их также скрыть те сервисы, которые отключить нельзя. Чтобы понять что именно отключать нам нужно знать сколько времени занимает загрузка каждого сервиса. Давайте рассмотрим анализ скорости загрузки systemd.

Анализ загрузки Systemd

Анализ скорости загрузки системы важен не только в самом процессе оптимизации, но и для того, чтобы оценить насколько эта оптимизация удалась. Перед и после оптимизации нужно замерять время загрузки, чтобы понять чего мы смогли добиться.

Давайте посмотрим насколько быстро грузится наша система сейчас:

systemd

Да, здесь 17 секунд, не так уж плохо, но будет еще лучше после завершения ускорения загрузки. На загрузку ядра уходит 5.405, а на все остальные сервисы 11.611. Чтобы понять какие именно сервисы замедляют систему нам нужна более подробная информация, мы можем ее получить с помощью параметра blame:

systemd1

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

systemd-analyze plot > graph.svf

Утилита сгенерирует svf файл с графиком, откройте его в браузере:

systemd2

Вот теперь у нас есть вся информация, чтобы оптимизировать систему. Здесь отображается не только время загрузки каждого сервиса, но также время когда он начал загружаться и когда завершил. Дальше начнем ускорение загрузки Linux.

Ускорение загрузки Linux

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

Настраивать Grub будем правильно. Параметры загрузки ядра находятся в файле /etc/default/grub, а именно в строчке GRUB_CMDLINE_LINUX_DEFAULT. Откройте этот файл:

Теперь приводим интересующую нас строчку к такому состоянию:

GRUB_CMDLINE_LINUX_DEFAULT="quiet rootfstype=ext4 libahci.ignore_sss=1 raid=noautodetect selinux=0 plymouth.enable=0 lpj=12053560"

Разберем подробнее за что отвечает каждый параметр:

  • quiet - вывод, это долго, поэтому говорим ядру что на экран нужно выводить минимум информации
  • rootfstype=ext4 - указываем в какую файловую систему отформатирован корень. У меня ext4.
  • libahci.ignore_sss=1 - Ignore staggered spinup flag, ускоряет загрузку жестких дисков
  • raid=noautodetect - raid я не использую, думаю вы тоже поэтому отключаем.
  • selinux=0 - система полномочий selinux на домашней машине тоже ни к чему, без нее будет быстрее.
  • plymouth.enable=0 - заставка plymouth тоже занимает много времени, поэтому убираем заставку
  • lpj=12053560 - позволяет задать константу loops_per_jiffy, что позволит ядру не вычислять ее каждый раз и сэкономит до 250 миллисекунд. Это значение индивидуально для каждого компьютера.

Чтобы узнать значение последнего параметра выполните:

dmesg | grep 'lpj='

systemd3

Нас будет интересовать значение lpj=, укажите его в своем конфигурационном файле.

Также для указания корневого раздела желательно не использовать всякие там UUID, быстрее будет если написать прямо. Для того чтобы конфигуратор grub не использовал grub добавьте в тот же файл строчку:

Сохраните файл и обновим конфигурацию grub:

Проверяем, действительно ли установлены нужные опции:

systemd5

Да, все правильно, перезагружаем компьютер, и смотрим что вышло:

systemd4

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

Настройка системы

Во-первых SELinux отключен не полностью. Для полного отключения добавляем строку в файл /etc/selinux/config:

sudo vi /etc/selinux/config

Во-вторых, проверка файловых систем тоже может занять некоторое время. Оставляем проверку на ошибки только для корня. Для этого откройте файл /etc/fstab и приведите строчку для корня к такому виду:

/dev/sda3 / ext4 defaults 1 1

Последний параметр отвечает за проверку, 1 - проверять, 0 - не проверять. Установите для всех других разделов 0. К тому же boot раздел лучше монтировать по требованию. Для этого изменяем его запись:

/dev/sda1 /boot ext4 noauto,comment=systemd.automount 1 0

Затем давайте перенесем папку /tmp в оперативную память, чтобы уменьшить количество операций на жестком диске:

tmpfs /tmp tmpfs defaults 0 0

Ускорение загрузки Linux отключением сервисов

Вот мы и добрались к сервисам. Оптимизация сервисов заключается в том, чтобы отключить лишнее, а также использовать только возможности, встроенные в systemd, так будет быстрее. Сначала перенесем всю функциональность на systemd.

Первым отключим rsyslog. В systemd используется свой механизм записи логов journald, поэтому вести еще один не нужно. Для отключения выполните:

sudo systemctl disable rsyslog
$ sudo systemctl mask rsyslog

Опция mask позволяет спрятать юнит, система будет думать что его не существует и не сможет загрузить. Восстановить такой юнит можно командой systemctl unmask.

В systemd реализована своя служба настройки сети - networkd, поэтому необязательно использовать NetworkManager. Работа со встроенной службой будет намного быстрее. Здесь нужно заметить, что если вы используете wifi и не хотите настраивать его вручную, через консоль, то отключать NetworkManager не стоит.

Отключаем NetworkManager и включаем networkd:

sudo systemctl disable NetworkManager
sudo systemctl enable systemd-networkd

Службу networking тоже можно отключить, если не используете:

sudo systemctl disable networking

Включаем resolved, который отвечает за настройку DNS серверов:

sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

Даем символическую ссылку на файл /etc/resolv.conf

sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Осталось настроить динамическое получение ip адреса при загрузке:

[Match]
Name=enp*
[Network]
DHCP=yes

enp0* значит, что сеть нужно подымать только для устройств, имена которых начинаются на enp0. Готово, сеть настроена.

В systemd есть свое решение для выполнения задач по расписанию, поэтому cron можно не использовать:

sudo systemctl disable cron

С заменой разобрались, перейдем к удалению лишнего. Отключаем фаервол, на домашней машине, за маршрутизатором он не нужен:

sudo systemctl disable ufw
$ sudo systemctl mask ufw

Отключаем apport (служба отчетов об ошибках):

sudo systemctl disable apport

Я не использую ppp и мобильные соединения, поэтому и эти сервисы можно отключить.

sudo systemctl disable pppd-dns
sudo systemctl mask pppd-dns

sudo systemctl disable ModemManager
sudo systemctl mask ModemManager

Если вы не используете Avahi, его тоже можно отключить:

sudo systemctl disable avahi-daemon

Систему AppArmor тоже можно отключить:

sudo systemctl disable apparmor

Также если у вас загружаются такие программы, как postfix (почтовый сервер), apache (веб-сервер), mysql (сервер баз данных) лучше их тоже убрать из автозагрузки и запускать потом вручную.

Перезагружаемся и проверяем скорость загрузки:

systemd7

У меня скорость загрузки linux выросла на пять секунд. Но это нормально, учитывая, что используется VirtualBox, на реальной машине можно получить и больше. А самая лучшая оптимизация - купить SSD, там можно достичь даже скорости загрузки до двух-трех секунд.

Выводы

Вот и все, в этой статье мы рассмотрели как ускорить загрузку Linux. Если у вас долго грузится Linux вы уже знаете что нужно делать. Если вы знаете другие способы ускорить загрузку Linux, напишите в комментариях!


если не ссд то нормально он у тебя грузится, что тебе не нравится?


старый ноутбучный винт


ты предвзятый, я бы сказал что он отлично грузится.

Ппц как медленно грузится, у меня на wd green за 10-20c c автостартом.


Ну, визуально, медленно. Да и по цифрам.

Больше грешу на свой дохлый винт. Все никак времени нет заменить в десктопе =)



Вот думаю когда он быстрее сломается или лень переборю и схожу в магазин =)


Reallocated_Sector_Ct 0x0033 029 029 140 Pre-fail Always FAILING_NOW 1365

ох тыж, как он вообще работает?

А сеть быстро поднимается?


уже два года работает =)


а вот это надо будет глянуть, тоже думал, что в роутере дело. спасибо, гляну


там в основном dhclient относительно долго получает настройки, если сделать статику то будет на порядок быстрее

Фигасе, у меня гента без этого поцтерошлака на старом компьютере грузится не больше сорока секунд…

ну да, анализатора времени загрузки то нету, вот и не тормозит


Или дело в старом убиттом ноутбучном винчестере?



90 секунд — это таймаут запуска юнита. ( Eddy_Em , как всегда, бомбит, ну да и хрен с ним.) Дай либо лог, либо systemd-analyze plot , раз уж с critical-chain ничего не видно.

intelfx ★★★★★ ( 08.12.15 12:37:32 )
Последнее исправление: intelfx 08.12.15 12:38:24 (всего исправлений: 2)



Не спец, но выскажусь(это лор, детка!) - если это загрузка от нажатия кнопки питалова до старта всяких там DM, то вполне сносно для старого ж\д. А вот если это до старта консольного входа. То это !ъ.

А так если верить секундомеру, то арч(да и гнета) грузится за 7-10сек(сам не знаю почему такой разброс получается).

34 секунды. Довольно быстро.

Это сократить можно?


5 Reallocated_Sector_Ct 0x0033 029 029 140 Pre-fail Always FAILING_NOW 1365

У тебя диску звезда пришла

Jefail ★★★★ ( 08.12.15 14:03:19 )
Последнее исправление: Jefail 08.12.15 14:03:39 (всего исправлений: 1)


Да я год-два назад про него писал. Еще живой, немного =)


Что сократить? Таймаут? Конечно, man TimeoutStart/TimeoutStop/JobTimeout.

В сети довольно много статей на тему ускорения работы ГНУ систем, начиная от самого Linux ядра, заканчивая разгоном железа. Но не всем они подойдут ввиду разнообразия:

  1. Семейств дистрибутивов;
  2. Окружений и ПО;
  3. Систем инициализации;
  4. Оборудования.

Встречается настройка ядра через /etc/default/grub, операции с монтированием носителей в /etc/fstab, советы по обращению с ФП, ОЗУ, ZRAM/ZSWAP/ZCACHE, оптимизации пользовательских окружений и ПО. Писать в про всё целиком . . . можно в отдельный справочник. Но ввиду озвученных выше причин, не все пригодятся, не факт, что будут работать, а эффект от иных может быть не заметен вовсе. Поэтому тут я собрал кое-какие варианты.

ПЕРЕД ПОДОБНЫМИ ДЕЙСТВИЯМИ НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ СОЗДАТЬ ТОЧКУ ВОССТАНОВЛЕНИЯ

Возможно, не стоит применять всё сразу, чтоб была возможность выявить возможные неполадки.

Поскольку большинство систем используют systemd, для них актуальны команды

kernel — время загрузки ядра,
userspace — время на загрузку всего остального

  • systemd-analyze blame — посмотреть какие именно службы загружаются и сколько времени на это требуется
  • systemd-analyze plot >graph.svf— команда создаст svf файл с графиком, откройте его в браузере.

Далее, стоит отключить ненужные службы, список сервисов и описание можно найти в сети, как и другие команды для systemd. Чтобы это сделать нужно ввести

sudo systemctl disable <имя_службы.service>

В сети есть статьи по оптимизации systemd и принадлежащих ей служб с описанием, но я не использую сие произведение, поэтому про него писать не стану. Вопрос использования служб индивидуальный.

Ускорение загрузки ядра Linux

Параметры загрузки ядра находятся в файле /etc/default/grub. Изменения нужно внести в значение строки GRUB_CMDLINE_LINUX_DEFAULT (значение в скобках, после знака = )

quiet - тихий вариант загрузки, выводит минимум информации

rootfstype=ext4 - в какую ФС отформатирован корень (в моём случае btrfs)

libahci.ignore_sss=1 - ускоряет загрузку жестких дисков

raid=noautodetect - отключение raid

selinux=0 - система контроля доступа, которая не нужна на домашнем ПК

plymouth.enable=0 - отключает заставку

lpj=0000000 - позволяет задать константу loops_per_jiffy, чтобы ядро её каждый раз не вычисляло. Значение индивидуально для каждого компьютера. Чтобы её узнать, нужно открыть ещё один терминал и там ввести «dmesg | grep 'lpj='». Полученное значение скопировать.

В итоге, строка будет иметь примерно такой вид:

GRUB_CMDLINE_LINUX_DEFAULT="quiet rootfstype=ext4 libahci.ignore_sss=1 raid=noautodetect selinux=0 plymouth.enable=0 lpj=12053560"

Для указания корневого раздела желательно не использовать UUID, быстрее будет, если написать прямо. Добавьте в тот же файл строчку:

GRUB_DISABLE_LINUX_UUID=true

После этой операции нужно обновить конфигурацию GRUB

sudo update-grub

Установка ПО

Preload — это демон, который считывает статистику часто используемых приложений, и хранит их в кэше, благодаря чему они быстрее запускаются

sudo apt-get install preload

Можно оставить настройки по умолчанию, в файле /var/lib/preload/preload.state информация о работе preload.

cycle — как часто preload будет получать от системы данные об используемых программ и библиотек.

halflife — как часто preload будет сбрасывать старую информацию.

minsize — ограничение на размер программы или библиотеки, которую preload будет обрабатывать.

Я у себя не нашел этой утилиты. Поэтому про её работу и настройку рекомендую почитать в сети, есть материалы

Prelink преобразовывает разделяемые библиотеки и выполняемые файлы таким образом, чтобы уменьшить количество требуемых перераспределений памяти при разрешении зависимостей и, таким образом, ускоряет запуск программ, позволяет прописать связи с библиотеками непосредственно в исполняемый файл, что ускорит запуск приложения. Выполняется это без перекомпиляции приложений.

sudo apt install prelink

В процессе работы копится всяческий мусор. Этот мусор стоит периодически чистить. Я сам постоянно использую Stacer и Bleachbit. Первая умеет много чего, а вторую программу считаю обязательной для любой ОС. Плюс использую команды для удаления зависимостей-сирот. Однако, всё же можно установить для очистки autoclean и autoremove.

sudo apt autoclean

sudo apt autoremove

Последним оставлю блок про оптимизации работ железа. Сюда стоит включить операции с SSD/HDD и ОЗУ, разгон ОЗУ/видеокарты, кастомные ядра, настройку работы ЦП и видеокарты. Для настройки работы nVidia утилита GWE и родная NVIDIA SERVER SETTING, которая устанавливается вместе с драйвером, для АМД — CoreCtrl, которая, к тому же, позволяет изменить режим работы процессора.

Для работы с SSD нужно выставить флаги в /etc/fstab

ssd, discard (Defaults - этот убираем) - для btrfs.

lazytime (Defaults, noatime - этот убираем) - для Ext4

Если вы уже выставили флаги discard в вашем Fstab, то включать TRIM по расписанию не надо!

На счет TRIM для SSD — довольно неоднозначная вещь. Встречал противоречивые мнения в сети: и что это утилита уже встроена в ядро, что она не работает по умолчанию должным образом, нужно прописывать самому в fstab. Ничего утверждать не буду. Прочитал на этот счет статью, что SSD сами справляются с уборкой мусора, надо всего-лишь держать там достаточно не размеченного пространства, порядка 10-15%. Собственно, на этом я и остановился.

Отключение защиты от уязвимостей в процессорах Intel

Spectre/Meltdown/Zombieload aka MDS (серьезно снижают производительность)

/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="nopti pti=off spectre_v2=off l1tf=off nospec_store_bypass_disable no_stf_barrier

Оптимизация дисковых операций

vm.dirty_bytes = 2097152

vm.dirty_background_bytes = 2097152

vm.vfs_cache_pressure = 50

Прошу обратить внимание на последнюю строку: этот параметр отвечает за кэширование объектов файловой системы в оперативную память. При значении 0, объекты не высвобождаются и так и остаются в оперативной памяти. Чем больше значение, тем чаще ядро будет проводить "зачистку" оперативной памяти. Поэтому если у вас оперативной памяти меньше 2 ГБ, то оставьте значение 50, дабы сократить число дисковых операций в разделе подкачки. Это также полезно в случае если у вас SSD. Но если у вас больше 2 ГБ оперативки, и обычный жёсткий диск, то выставьте значение этого параметра на 1000. Это позволит более агрессивно кэшировать дисковые операции, тем самым повысив быстродействие при достаточном количестве оперативной памяти. По умолчанию значение этого параметра равно 100.

Читайте также: