Мини заметка об оптимизации Arch Linux

6f086a8aa64bbf34188a5c5e6a8aba8a.jpg

Всем привет! Наверно, многие пришли к линуксу, когда их старый компьютер или ноутбук не тянул, или плохо тянул операционные системы от Microsoft. Многие пробовали разные дистрибутивы — AntiX, MX Linux, Linux Lite, Lubuntu, Xubuntu, и многие другие. Но скорее всего, вы в итоге пришли к Arch Linux — по моему скромному мнению, одному из лучших дистрибутивов.

Многое я взял из ARU — гайд по оптимизации Arch Linux (v2022.07.01).

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

Устанавливая какое-либо DE или WM, вы скорее всего установите минимальную комплектацию, а также из-за минималистичности арча — вы получаете систему, которая не будет есть много ресурсов вашего ПК, ибо не будет никаких лишних сервисов и демонов.

Но даже тогда, особенно на очень маломощных ПК, просто минимальной установки может не хватить. Тогда приходится браться за оптимизацию.

Внимание! Статья написана ТОЛЬКО для Arch Linux, методы оптимизации могут не работать на других дистрибутивах.

Почему именно арч лучший дистрибутив для установки на слабые ПК (да и не только) мы уже поняли. Минималистичность, быстрота, отсутствие лишнего делают арч практически идеальной системой.

Да, можно конечно еще установить 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' -l 25 --sort rate --save /etc/pacman.d/mirrorlist

Иногда хорошим выбором будет брать зеркала не из вашей страны, например, иногда лучше из Германии.

Теперь наша задача — установить зависимости, которые нам потребуются.

Для начала установим микрокод — если у вас intel, то установите intel-ucode, если amd — amd-ucode.

sudo pacman -S intel-ucode			# Intel
sudo pacman -S amd-ucode			# AMD
sudo mkinitcpio -P 					# Обновляем образы initramfs

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

Следующий шаг — установка утилит:

sudo pacman -S lrzip unrar unzip unace p7zip squashfs-tools base-devel bash wget 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-repo
tar 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 -p
sudo 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), то надо выполнить следующие действия:

sudo vim /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 earlyoom
sudo systemctl enable earlyoom

Trim

Trim — команда интерфейса ATA, позволяющая операционной системе уведомить твердотельный накопитель о том, какие блоки данных (страницы) не несут полезной нагрузки и их можно не хранить физически.

Эта команда полезна для SSD

sudo systemctl enable fstrim.timer
sudo 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 # Интеграция с граф.планшетом Wacom
systemctl --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.

Установить эти два пакета можно двумя способами:

  1. Обычный (через git):

git clone https://aur.archlinux.org/gnome-shell-performance
cd gnome-shell-performance
makepkg -sric

git clone https://aur.archlinux.org/mutter-performance
cd mutter-performance
makepkg -sric
  1. Через yay:

# Установка yay (раз и навсегда)
git clone https://aur.archlinux.org/yay
cd yay
makepkg -sric

yay -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/disksize
echo '1024M' > /sys/block/zram1/disksize

mkswap /dev/zram0
mkswap /dev/zram1

swapon /dev/zram0 -p 10
swapon /dev/zram1 -p 10

Этот модуль работает как tmpfs — берется кусок памяти от имени ядра. Команды discard/trim это блочное устройство воспринимает примерно как SSD.

Оптимизация загрузки ядра

Вы можете немного изменить параметры загрузки ядра в GRUB, измените следующую строку в /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="... loglevel=2 nowatchdog 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 ..."

Небольшой совет

Если вы хотите больше скорости, можете установить вместо DE легкий WM.

Среди обыкновенных можно выделить openbox, icewm.

А также есть тайловые оконные менеджеры. Когда вы установите их, вы сможете стать членом касты тайломанов. И скорее всего начнете кастомизацию своей линукс-системы. Если вы хотите, могу сделать статью на тему кастомизации линукса от 0 до 1.

Среди тайловых оконных менеджеров можно выделить иксовые: DWM, bspwm, i3wm, а среди Wayland’овых — hyprland, sway. А также есть qtile — он написан на Python, и может запускать как и под X11, как и под Wayland.

Заключение

Используя весь этот пак оптимизаций, вы дадите буквально вторую жизнь своему старому устройству. Или просто ускорите работу вашего ПК, не прибегая к суровым методам (например установка Gentoo с оптимизиционными флагами компилятора).

И специально для вас я разработал баш-скрипт, который автоматизирует оптимизацию, очистку системы.

Этот репозиторий есть по ссылке. Весь репозиторий и комментарии на английском.

   ____        __  _    ___              __   
  / __ \____  / /_(_)  /   |  __________/ /_  
 / / / / __ \/ __/ /  / /| | / ___/ ___/ __ \ 
/ /_/ / /_/ / /_/ /  / ___ |/ /  / /__/ / / / 
\____/ .___/\__/_/  /_/  |_/_/   \___/_/ /_/  
    /_/                                       
   >>>   A tool for fast optimization of Arch

Источники

© Habrahabr.ru