Оптимизация Arch Linux до небес
Всем привет! Наверно, многие пришли к линуксу, когда их старый компьютер или ноутбук не тянул, или плохо тянул операционные системы от Microsoft. Многие пробовали разные дистрибутивы — AntiX, MX Linux, Linux Lite, Lubuntu, Xubuntu, и многие другие. Но скорее всего, вы в итоге пришли к Arch Linux — по моему скромному мнению, одному из лучших дистрибутивов.
Арч минималистичный, его установка не так проста, особенно неопытному пользователю, но за это мы получаем широту действий — хочешь, можешь установить гном, а хочешь — хоть тайловый оконный менеджер.
Устанавливая какое-либо DE или WM, вы скорее всего установите минимальную комплектацию, а также из-за минималистичности арча — вы получаете систему, которая не будет есть много ресурсов вашего ПК, ибо не будет никаких лишних сервисов и демонов.
Но даже тогда, особенно на очень маломощных ПК, просто минимальной установки может не хватить. Тогда приходится браться за оптимизацию.
Внимание! Статья написана ТОЛЬКО для Arch Linux, методы оптимизации могут не работать на других дистрибутивах.
Я много пишу про Linux в своем канале и в недавнем опросе, большинство коллег, проголосовали за Arch, как за лучший дистрибутив для установки на слабые ПК (да и не только). Минималистичность, быстрота, отсутствие лишнего делают арч практически идеальной системой.
Да, можно конечно еще установить Artix — форк арча без systemD, но это уже совсем другая история. Ну и не хочется мне разводить холивар из-за systemD.
Итак, перед началом экстремальных хирургических работ в нашей системе давайте создадим точку восстановления системы при помощи Timeshift, на случай проблем. Установите командой sudo pacman -S timeshift. Как создать точку восстановлению, надеюсь, не придется рассказывать.
Но перед началом, я могу посоветовать вам установить CachyOS. Это дистрибутив, основанный на арче, но, как говорят создатели, с патчами на оптимизацию и созданный для повышенной производительности системы. Но это не мой вариант.
Обновление системы
Перед началом работ давайте обновим систему и подредактируем пару конфигов.
Откройте файл по пути /etc/pacman.conf, и раскомментируйте строчку ParallelDownloads. Этот параметр позволит использовать параллельную загрузку.
По желанию, можете раскомментировать строчку Color, и после нее добавить строку ILoveCandy. Первая включает цвет, а вторая создает анимацию пакмана при загрузке пакетов. Чисто косметические улучшения, не более.
sudo pacman-key --init# Инициализацияsudo pacman-key --populate archlinux # Получить ключи из репозиторияsudo pacman-key --refresh-keys# Проверить текущие ключи на актуальностьsudo pacman -Syu# Обновляем систему
После нам нужно будет немного настроить скорость зеркал:
sudo pacman -S reflector rsync curl# Установка reflector и его зависимостей# Ставим зеркало из Россииsudo reflector --verbose--country'Russia'-l25--sort rate --save /etc/pacman.d/mirrorlist
Иногда хорошим выбором будет брать зеркала не из вашей страны, например, иногда лучше из Германии.
Теперь наша задача — установить зависимости, которые нам потребуются.
Для начала установим микрокод — если у вас intel, то установите intel-ucode, если amd — amd-ucode.
sudo pacman -S intel-ucode # Intelsudo pacman -S amd-ucode # AMDsudo mkinitcpio -P# Обновляем образы initramfs
Производители процессоров выпускают обновления стабильности и безопасности для микрокода процессора. Несмотря на то, что микрокод можно обновить с помощью BIOS, ядро Linux также может применять эти обновления во время загрузки. Эти обновления предоставляют исправления ошибок, которые могут быть критичны для стабильности вашей системы.
Следующий шаг — установка утилит:
sudo pacman -S lrzip unrar unzip unace p7zip squashfs-tools base-devel bashwget tar git pacman-contrib nano vim
В этой команде мы установили утилиты для работы с разными архивами, инструменты squashfs, базовые утилиты для разработчиков, баш, систему контроля версий git, pacman-contrib (он нам будет нужен для очистки системы от кэша пакмана), и пару консольных редакторов текста.
По желанию, вы можете также установить набор прикладного ПО:
sudo pacman -S chromium vlc gvfs nemo qbittorrent kitty
Вместо kitty вы можете установить какой угодно другой терминал. Также как и вместо nemo.
Скорее всего, вы могли уже установить нужные вам видео-драйвера. Но на всякий случай, оставлю команды для установки.
AMD: sudo pacman -S mesa vulkan-radeon vulkan-icd-loader
INTEL: sudo pacman -S mesa vulkan-intel vulkan-icd-loader
Настройка
После этого можно изменить файл /etc/makepkg.conf. Это конфиг для команды makepkg, который используется для сборки пакетов.
Измените следующие данные:
CFLAGS="-march=native -mtune=native -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ -fstack-clash-protection -fcf-protection"CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS"RUSTFLAGS="-C opt-level=3"MAKEFLAGS="-j$(nproc) -l$(nproc)"OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)
Здесь вы можете увидеть флаги для компиляторов и настройку сборки.
Компоненты из CachyOS
Как я говорил, CachyOS — оптимизированная сборка арча. Если вы решили остаться на ванильном арче, то вы можете установить репозиторий cachyos.
А в репозитории cachyos есть много интересного — готовые конфигурации некоторых оконных менеджеров и окружений рабочего стола, а также оптимизированные ядра с разными планировщиками.
Планировщики предназначены для планирования различные операции внутри ядра системы.
Практически все приложения на Linux используют какие-либо операции ввода-вывода. Без планировщика, каждый раз когда происходит запрос на ввод-вывод, происходило бы взаимодействие с ядром и такие операции бы выполнялись немедленно. Более того, может возникнуть такая ситуация, когда вы можете получить огромное количество запросов на ввод-вывод, которое заставит головки диска буквально метаться по нему стороны в сторону.
Разница между производительностью жестких дисков и операционной системой выросла очень быстро. Для обслуживания прерывания — приостанавливается работа всех остальных приложений и со стороны это выглядит как снижение отзывчивости системы. Планирование событий ввода-вывода несет в себе необходимость решения многих вопросов. Планировщику необходимо хранить поступившие запросы в специальной очереди. Самое главное с чего следует начать при рассмотрении архитектуры планировщика или настройки существующих планировщиков — это определение назначения, функций и роли системы.
Для установки надо ввести следующие команды:
wget https://mirror.cachyos.org/cachyos-repo.tar.xz # получаем архив cachyos-repotar xvf cachyos-repo.tar.xz # разархивируемrm cachyos-repo.tar.xz # удаляем архивcd cachyos-repo # переходим в директориюsudo ./cachyos-repo.sh # запускаем скрипт установки репозиторияsudo pacman -S linux-cachyos linux-cachyos-headers # устанавливаем ядроsudo mkinitcpio -psudo grub-mkconfig -o /boot/grub/grub.cfg
Мы устанавливаем ядро с SCHED-EXT планировщиком (BPF extensible scheduler class).
Но также поддерживаются следующие:
- (BORE) Burst-Oriented Response Enhancer Scheduler by firelzrd (BORE) linux-bore / linux-cachyos-bore / linux-cachyos
- (EEVDF) Earliest Eligible Virtual Deadline — linux-cachyos-eevdf
- (ECHO) Enhanced CPU Handling Orchestrator Scheduler by Hamad Marri
Также можно увеличить производство через совместимость процессора с разными версиями архитектуры x86_64.
Можно увидеть, какую версию поддерживает ваш процессор через команду /lib/ld-linux-x86-64.so.2 --help | grep supported.
Вот пример вывода:
> /lib/ld-linux-x86-64.so.2 --help | grep supported x86-64-v4 (supported, searched) x86-64-v3 (supported, searched) x86-64-v2 (supported, searched)
Если вы видите x86-64-v4 (supported, searched) или что-то похожее, то значит ваш процессор поддерживает данную версию архитектуры. Если же просто x86-64-v4, то значит ваш процессор не поддерживается.
Для того чтобы использовать репозиторий с программами под вашу версию (например, у вас доступна x86-64-v4), то надо выполнить следующие действия:
sudovim /etc/pacman.conf # открываем конфиг пакмана# Если процессор не поддерживает какую ту версию, вы можете оставить так:[cachyos]Include = /etc/pacman.d/cachyos-mirrorlist# Но если поддерживает, то:[cachyos-v3]Include = /etc/pacman.d/cachyos-v3-mirrorlist[cachyos-core-v3]Include = /etc/pacman.d/cachyos-v3-mirrorlist[cachyos-extra-v3]Include = /etc/pacman.d/cachyos-v3-mirrorlist[cachyos]Include = /etc/pacman.d/cachyos-mirrorlist# Не забудьте изменить v3 на вашу версию (может быть у вас v4, а может и v2)# И после обновите системуsudo pacman -Syu
Если вы установили ядро с планировщиком SCHED-EXT (по дефолту), то можете установить специальную утилиту scx-scheds, который включает дополнительные планировщики:
sudo pacman -S scx-scheds
Ниже список планировщиков с их путями:
/usr/bin/scx_central /usr/bin/scx_flatcg /usr/bin/scx_lavd /usr/bin/scx_layered /usr/bin/scx_nest /usr/bin/scx_pair /usr/bin/scx_qmap /usr/bin/scx_rlfifo /usr/bin/scx_rustland /usr/bin/scx_rusty /usr/bin/scx_simple /usr/bin/scx_userland
Чтобы запустить планировщик, введите в терминале:
sudo scx_
Полезные утилиты
Некоторые полезные утилиты, которые могут помочь вам оптимизировать ОС.
Earlyoom
Out-Of-Memory Killer (OOM) — это процесс в Linux, который завершает приложение, чтобы спасти ядро от сбоя. Он жертвует приложением, чтобы сохранить работу ОС.
Когда в системе заканчивается память, OOM вызывает функцию out_of_memory(). В ней есть функция select_bad_process(), которая получает оценку от функции badness(). Под раздачу попадает самый «плохой» процесс.
Earlyoom автоматически завершает программу, если она приводит к исчерпыванию всей свободной ОЗУ в системе, предотвращая ситуацию нехватки оперативной памяти – OOM. Условия срабатывания такие:
Установка и запуск:
sudo pacman -S earlyoomsudo systemctl enable earlyoom
Trim
Trim — команда интерфейса ATA, позволяющая операционной системе уведомить твердотельный накопитель о том, какие блоки данных (страницы) не несут полезной нагрузки и их можно не хранить физически.
Эта команда полезна для SSD
sudo systemctl enable fstrim.timersudo fstrim -v /sudo fstrim -va /
CPUPower
Все мы знаем, что на Windows есть режимы использования батареи — сбалансированный или максимальный. На линуксе такого из коробки нет, но можно установить CPUPower. По умолчанию ваш процессор динамически меняет свою частоту, что в принципе правильно и дает баланс между энергосбережением и производительностью. Но если вы все таки хотите выжать все соки, то вы можете закрепить применение режима максимальной производительности для вашего процессора.
sudo pacman -S cpupower # Установит менеджер управления частотой процессораsudo cpupower frequency-set -g performance # Выставляет максимальную производительность до перезагрузки системы.
После в файле /etc/default/cpupower строку governor= исправьте на governor=performance.
И после включаем сервис в автозапуск:
sudo systemctl enable cpupower
Оптимизация GNOME
Гном — один из самых прожорливых DE. Но, по моему скромному мнению, один из лучших DE (конечно же вы можете считать по другому).
Но можно попробовать оптимизировать его, путем отключения сервисов, и в совокупности со всей оптимизацией, он будет стабильно работать на 2гб ОЗУ! Конечно, при открытии браузера, ситуация ухудшается, но здесь уже мало что можно поделать, если не идти в крайние дебри линукс-оптимизации.
Для начала отключим некоторые ненужные сервисы:
systemctl --user mask org.gnome.SettingsDaemon.Wacom.service # Интеграция с граф.планшетом Wacomsystemctl --user mask org.gnome.SettingsDaemon.PrintNotifications.service # уведомления о печати принтеромsystemctl --user mask org.gnome.SettingsDaemon.Color.service # служба управления цветовыми профилями. Без этого сервиса не будет работать "теплый" режим.systemctl --user mask org.gnome.SettingsDaemon.A11ySettings.service # служба для управления специальными возможностями (для людей с ограниченными возможностями)systemctl --user mask org.gnome.SettingsDaemon.Wwan.service # отключение службы для работы с беспроводными сетями. Не отключать, если вы пользуетесь WiFi.systemctl --user mask org.gnome.SettingsDaemon.UsbProtection.service # отключение служб защиты от сторонних USB при блокировке экранаsystemctl --user mask org.gnome.SettingsDaemon.ScreensaverProxy.service # автоматическая блокировка экрана (скринсейвер)systemctl --user mask org.gnome.SettingsDaemon.Sharing.service # общий доступ к каталогам и файламsystemctl --user mask org.gnome.SettingsDaemon.Rfkill.service # Отключение службы управления подсистемой rfkill, отвечающей за отключения любого радиопередатчика в системе (WiFi и Bluetooth)systemctl --user mask org.gnome.SettingsDaemon.Keyboard.service # Отключение службы управления клавиатурой и раскладками GNOME. Можно смело отключать если уже настроили все раскладки и настройки клавиатуры заранее, ибо все предыдущие настройки сохраняются при отключении.systemctl --user mask org.gnome.SettingsDaemon.Sound.service # Отключаем службу управления звуком GNOME. Отключает ТОЛЬКО настройки звука GNOME, а не вообще всё управлением звуком в системе.systemctl --user mask org.gnome.SettingsDaemon.Smartcard.service # интеграция с кард-ридеромsystemctl --user mask org.gnome.SettingsDaemon.Housekeeping.service # служба слежения за свободным местом на дискеsystemctl --user mask org.gnome.SettingsDaemon.Power.service # служба управления электропитанием# Для включения службы:systemctl --user unmask --now СЛУЖБА
Если это плохо помогло, то наш вариант — gnome-shell-performance и mutter-performance. Они доступны в AUR — arch user repository.
Установить эти два пакета можно двумя способами:
- Обычный (через git):
git clone https://aur.archlinux.org/gnome-shell-performancecd gnome-shell-performancemakepkg -sricgit clone https://aur.archlinux.org/mutter-performancecd mutter-performancemakepkg -sric
- Через yay:
Установка yay (раз и навсегда)git clone https://aur.archlinux.org/yaycd yaymakepkg -sricyay -S gnome-shell-performance mutter-performance
Таким путем можно компилировать некоторые программы, например nautilus-git. Это немного может прибавить производительности за счет нативной компиляции. Но не стоит слишком сильно увлекаться компиляцией — иначе вам лучше бы установить Gentoo.
Ну и под конец, можно отключить анимации:
gsettings set org.gnome.desktop.interface enable-animations false
Оптимизация KDE
Чисто для приличия надо бы облегчить KDE, несмотря на то, что я считаю эту оболочку довольно плохой, перегруженной и "bloat".
sudo pacman -Rsn kwayland-integration kwallet-pam plasma-thunderbolt plasma-vault powerdevil plasma-sdk kgamma5 drkonqi discover oxygen bluedevil plasma-browser-integration plasma-firewall# Не удаляйте powerdevil если у вас ноутбук, а bluedevil если используете bluetooth соответственно.sudo pacman -Rsn plasma-pa # Удаляем виджет управления звуком.sudo pacman -S kmix # Замена виджету plasma-pa, совместим с ALSA.systemctl --user mask kde-baloo.service # Полное отключение baloo (файловый индексатор)systemctl --user mask plasma-baloorunner.service
Все остальные настройки хранятся в центре управления, и их легко найти. Отключите лишние анимации — и все.
Повышение производительности памяти
Нехватка памяти — это частая проблема. Система начинает тормозить — подвисают окна, медленная работа. А почему это происходит? Ибо планировщик ядра Linux не может выполнить запрос на какое то действие в запущенной программе, пока не получит доступ к ее оперативной памяти, выполнить следующее действие тоже не может, образовывается очередь из запросов на чтение с диска, и система начинает медленно работать, потому что обработка очереди происходит медленнее.
Если в такой момент запустить htop, то показатель Load Average (LA) скорее всего будет высоким.
Часто на всех сайтах советуют выставить параметр vm.swappines вместо 60 на 10. На самом деле, не всегда это увеличит производительность. Этот элемент управления используется для определения того, насколько агрессивно ядро будет использовать подкачку страниц памяти. Более высокие значения увеличивают агрессивность, а низкие уменьшают объем подкачки. Значение 0 указывает ядру не запускать подкачку до тех пор, пока количество свободных страниц и страниц с файловой поддержкой не станет меньше максимального значения в зоне. Если подробнее, то значение от 0 до 100, которое определяет, в какой степени система предпочитает анонимную память или кэш страниц. Высокое значение повышает производительность файловой системы, в то же время менее активно вытесняя активные процессы из физической памяти. Низкое значение позволяет избежать перегрузки процессов из-за нехватки памяти, снижая производительность ввода-вывода. Увеличивается приоритет данных приложений, взамен ухудшается кэширование ввода-вывода.
Также можно включить zram — встроенный модуль ядра linux, который сжимает оперативную память путем увеличения нагрузки на процессор.
ОН увеличивает производительность благодаря предотвращению подкачки страниц на диск, используя сжатое блочное устройство в оперативной памяти, пока не появляется необходимость использовать файл подкачки на жестком диске.
Для запуска zram нужно загрузить модуль ядра:
$ modprobe zram num_devices=2
После отредактируйте /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="... zram.num_devices=2 ..."
В num_devices задается количество сжатых блочных устройств, которое будет создано. Создавать надо их по количеству ядер, для наиболее оптимального использования процессора.
После можно делать с ними что угодно — можно создать SWAP-разделы:
echo'1024M' > /sys/block/zram0/disksizeecho'1024M' > /sys/block/zram1/disksizemkswap /dev/zram0mkswap /dev/zram1swapon /dev/zram0 -p10swapon /dev/zram1 -p10
Этот модуль работает как tmpfs — берется кусок памяти от имени ядра. Команды discard/trim это блочное устройство воспринимает примерно как SSD.
Оптимизация загрузки ядра
Вы можете немного изменить параметры загрузки ядра в GRUB, измените следующую строку в /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="... loglevel=2 nowatchdog rhgb split_lock_detect=off processor.ignore_ppc=1 migrations=off msr.allow_writes=on pcie_aspm=force module.sig_unenforce cryptomgr.notests initcall_debug no_timer_check noreplace-smp page_alloc.shuffle=1 rcupdate.rcu_expedited=1 tsc=reliable ..."
- loglevel=2 — Устанавливает уровень журналирования ядра на 2, что означает, что будут выводиться только критические сообщения.
- nowatchdog — Отключает наблюдение за собакой (watchdog), что позволяет избежать перезагрузки системы в случае проблем с наблюдением.
- rhgb — Запускает Red Hat Graphical Boot, что обеспечивает графический интерфейс при загрузке системы.
- split_lock_detect=off — Отключает обнаружение разделенных блокировок, что может повысить производительность.
- processor.ignore_ppc=1 — Игнорирует предпочтения процессора (processor preferences), что может быть полезно для определенных конфигураций.
- migrations=off — Отключает миграции процессов между ядрами процессора.
- msr.allow_writes=on — Разрешает запись в регистры модели специфических регистров (Model Specific Registers).
- pcie_aspm=force — Принудительно включает энергосберегающий режим ASPM для устройств PCI Express.
- module.sig_unenforce — Отключает проверку подписей модулей ядра.
- cryptomgr.notests — Отключает тестирование криптографических алгоритмов.
- initcall_debug — Включает отладочную информацию для вызовов инициализации.
- no_timer_check — Отключает проверку таймеров.
- noreplace-smp — Предотвращает замену ядра SMP (Symmetric Multiprocessing).
- page_alloc.shuffle=1 — Включает перемешивание страниц в аллокаторе памяти.
- rcupdate.rcu_expedited=1 — Ускоряет выполнение RCU (Read-Copy Update).
- tsc=reliable — Устанавливает TSC (Time Stamp Counter) как надежный источник времени.
Небольшой совет
Если вы хотите больше скорости, можете установить вместо DE легкий WM.
Среди обыкновенных можно выделить openbox, icewm.
А также есть тайловые оконные менеджеры. Когда вы установите их, вы сможете стать членом касты тайломанов. И скорее всего начнете кастомизацию своей линукс-системы. Если вы хотите, могу сделать статью на тему кастомизации линукса от 0 до 1.
Среди тайловых оконных менеджеров можно выделить иксовые: DWM, bspwm, i3wm, а среди Wayland'овых — hyprland, sway. А также есть qtile — он написан на Python, и может запускать как и под X11, как и под Wayland.
Очистка системы
Советую также установить пакет pacman-contrib:
sudo pacman -S pacman-contrib
После этого можно очистить систему:
sudo pacman -Sccsudo paccache -rsudo paccache -rk1sudo paccache -ruk0sudo pacman -Rns$(pacman -Qtdq)fc-cache -frvsudo truncate -s0 /var/log/pacman.logsudo truncate -s0 /var/log/pacman.logrm-rf ~/.cache/sudorm-rf /tmp/*
Этим набором команды мы очищаем весь кэш, логи, пакеты-сироты.
Также можно использовать команду du для проверки места, которое занимает директория или файлы, либо установить утилиту ncdu, псевдографическая утилита, похожая на du.
Заключение
Используя весь этот пак оптимизаций, вы дадите буквально вторую жизнь своему старому устройству. Или просто ускорите работу вашего ПК, не прибегая к суровым методам (например установка Gentoo с оптимизационными флагами компилятора).
И специально для вас я разработал баш-скрипт, который автоматизирует оптимизацию, очистку системы.
Этот репозиторий есть по ссылке. Весь репозиторий и комментарии на английском.
____ __ _ ___ __ / __ \____ / /_(_) / | __________/ /_ / / / / __ \/ __/ / / /| | / ___/ ___/ __ \ / /_/ / /_/ / /_/ / / ___ |/ / / /__/ / / / \____/ .___/\__/_/ /_/ |_/_/ \___/_/ /_/ /_/ >>> A tool for fast optimization of Arch
А также у меня есть телеграм канал по линуксу куда я выкладываю свежие новости, гайды и статьи по теме линукса. Обещаю, будет интересно!