Кастомные ядра¶
Прежде чем мы начнем, хотелось бы прояснить такой вопрос: "А зачем вообще нужны эти кастомные ядра?". Чтобы дать ответ на данный вопрос, стоит понимать, что ядро Linux является определенным универсальным стандартом в мире операционных систем, которое одинаково подоходит как для сервера, роутера, домашнего ПК или ноутбука, микро-контроллера, телефона и так далее. То есть, ядро по умолчанию является швейцарским ножом, позволяющим применять себя в разных задачах, но при этом конечно не быть наилучшим в чём-то конкретном, определенном. Нет, это не значит что на ванильном ядре вы не сможете запустить какую-то игру скажем через Wine или Proton, но такой опыт не будет лучшим, т.к. за такую многопрофильность ядру приходится платить меньшей производительностью в этих самых определенных задачах. Кастомные же ядро подразумевает определенную заточенность под что-то конкретное, делая упор на что-то одно. В нашем случае это производительность и игры, а также улучшение опыта использования Linux на домашнем ПК или ноутбуке. В этом нам и помогут нижеперечисленные ядра, а также их правильная настройка.
Проверка ядра используемого в данный момент осуществляется следующей командой: uname -r
.
Zen¶
Это отличный выбор для неискушенного пользователя, что не ставит задачи в покорении максимальной планки FPS. Доступен в официальных репозиториях (не нужно компилировать).
I. Установка
sudo pacman -S linux-zen linux-zen-headers # Не забудь обновить GRUB.
liquorix¶
Идеальное ядро для игроманов. Значительно улучшает качество отклика как в повседневных задачах так и в играх. Ориентирован на процессоры Intel.
I. Установка
sudo pacman-key --keyserver hkps://keyserver.ubuntu.com --recv-keys 9AE4078033F8024D
sudo pacman-key --lsign-key 9AE4078033F8024D # Добавляем GPG ключ
sudo nano /etc/pacman.conf # Добавляем сюда строчку ниже.
[liquorix]
Server = https://liquorix.net/archlinux/$repo/$arch
sudo pacman -Suuyy
sudo pacman -S linux-lqx linux-lqx-headers # Не забудь обновить GRUB.
Установка I рекомендуется если не хотите компилировать, но тогда производительность будет хуже чем у аналогичного скомпилированного ядра.
II. Установка
git clone https://aur.archlinux.org/linux-lqx.git # Скачивание исходников.
cd linux-lqx # Переход в linux-lqx
gpg --keyserver keyserver.ubuntu.com --recv-keys 38DBBDC86092693E # GPG ключ
makepkg -sric # Сборка и установка.
III. Установка и настройка
Выполнение кастомизации ядра linux-lqx. Тонкая настрйка ядра позволит дать ещё больше производительности.
git clone https://aur.archlinux.org/linux-lqx.git # Скачивание исходников.
cd linux-lqx # Переход в linux-lqx
nano PKGBUILD # Редактирование конфигурационного файла.
Нужно привести строку _makenconfig= к виду _makenconfig=y:
makepkg -sric # Сборка и установка.
Следовать графической инструкции.
Последовательное выполнение данных инструкций приведет к повышению производительности, а также исправит некорректное поведение драйвера NVIDIA при работе с фреймбуфером.
Xanmod¶
Альтернатива liquorix, так же нацеленная на оптимизацию под игрушки и повышение плавности работы системы.
Внимание
Не рекомендуется обладателям процессоров Intel. Имеет особенность сброса частот для процессоров Intel.
I. Установка:
git clone https://aur.archlinux.org/linux-xanmod.git # Скачивание исходников.
cd linux-xanmod # Переход в linux-xanmod
# Если у вас процессор от AMD, то вместо 98 пишите 99
export _microarchitecture=98 use_numa=n use_tracers=n _compiler=clang
makepkg -sric # Сборка и установка
Если возникает сбой с неизвестным ключом, то выполните следующую операцию::
gpg --keyserver keyserver.ubuntu.com --recv-keys КЛЮЧ
linux-tkg¶
Является альтернативой всем трем ядрам выше, что предоставляет возможность собрать ядро с набором множества патчей на улучшение производительности в игрушках (Futex2, Zenify). Предоставляет выбор в сборке ядра с разными планировщиками. Грубо говоря, это ядро сборная солянка из всех остальных ядер с большим набором патчей.
I. Установка и настройка:
git clone https://github.com/Frogging-Family/linux-tkg.git
cd linux-tkg
Есть две возможности предварительной настройки linux-tkg: либо через редактирование файла customization.cfg, либо через терминал по ходу процесса установки. Мы выбираем первое и отредактируем customization.cfg::
nano customization.cfg
Итак, настройка здесь достаточно обширная поэтому мы будем останавливаться только на интересующих нас настройках:
_version="5.16"
- Здесь выбираем версию ядра которую мы хотим установить.
Выбирайте самую последнюю из доступных.
_modprobeddb="false"
- Опция отвечающая за сборку мини-ядра.
Подробнее о нем вы можете узнать в соответствующем разделе.
Если хотите собрать мини-ядро - пишите "true", если нет - "false".
_menuconfig="1"
- Выбор настройки ядра через menuconfg/xconfig/nconfig.
Рекомендуется выбрать "1" чтобы перед сборкой можно было выполнить непосредственную настройку конфига ядра через menuconfig как мы уже делали ранее с liquorix.
_cpusched="pds"
- Выбор CPU планировщика ядра.
К выбору предоставляется довольно много планировщиков, но мы советуем обратить ваше внимание только на некоторых из них:
"pds", "bmq", "cacule", "cfs" (дефолтный для ванильного ядра).
По некоторым данным, PDS дает больше FPS, а CacULE дает лучшие задержки по времени кадра (плавность).
Однако все слишком ситуативно чтобы выбрать из них лучшего, в каких-то играх/задачах будет выигрывать PDS, а в каких-то CaCULE и так далее.
Рекомендуется попробовать PDS или CacULE.
_rr_interval="default"
- Задает продолжительность удержания двумя задачами одинакового приоритета.
Рекомендуемое значение слишком зависит от выбранного планировщика, поэтому лучше всего задавайте "default".
_default_cpu_gov="performance"
- Выбирает режим по умолчанию в котором будет масштабироваться частота процессора.
Рекомендуется "performance" чтобы процессор по умолчанию работал в режиме высокой производительности.
_aggressive_ondemand="false"
- Задает агрессивное применение динамического управления частотой процессора по необходимости в выполняемой задаче,
обеспечивая тем самым энергоэффективность.
Но т.к. выше мы уже закрепили режим масштабирования "performance", то мы можем отключить этот параметр.
Однако пользователи ноутбуков могут оставить этот параметр включенным.
_disable_acpi_cpufreq="true"
- Отключает универсальный acpi_freq драйвер масштабирования частоты процессора в угоду фирменному драйверу Intel/AMD процессоров
что имеют лучшую производительность по сравнению с acpi_freq.
Выбирайте значение по собственному усмотрению со знанием своего CPU.
_sched_yield_type="0"
- Настраивает выполнение освобождения процесса от потребления процессорного времени путем его переноса в конец очереди выполнения процессов.
Рекомендуемое значение для лучшей производительности - "0", т.е. не осуществлять перенос в конец очереди для освобождения процесса.
_tickless="0"
- Рекомендуется выбирать периодические тики таймера ядра.
_timer_freq="1000"
- Задает частоту таймера.
Рекомендуется 1000 для лучшей отзывчивости системы на домашнем ПК или ноутбуке.
_fsync="true"
- Задействует поддержку ядром замены Esync от компании Valve - Fsync.
Обязательно к включению ("true") для лучшей производительности в играх.
_futex2="true"
- Осуществляет использование нового, экспериментального futex2 вызова что может дать лучшую производительность для игрушек запускаемых через Wine/Proton. Для обычных ядер поддержка Futex2 включена начиная с версии 5.16+.
_winesync="false"
- Ещё одна замена esync, но уже от разработчиков Wine.
_zenify="true"
- Применяет твики Zen и Liquorix для улучшения производительности в играх.
Настоятельно рекомендуется к включению.
_complierlevel="1"
- Задает степень оптимизации ядра во время сборки.
Лучше всего выбирать "1", т.е. сборку с -O2 флагом (высокая производительность).
_processor_opt="native_intel"
- С учетом какой архитектуры процессора собирать ядро.
Настоятельно рекомендуется указать здесь либо архитектуру непосредственно вашего процессора (К примеру: "skylake"),
либо фирму производитель, где для Intel это - "native_intel", для AMD - "native_amd".
_ftracedisable="true"
- Отключает лишние трекеры для отладки ядра.
_acs_override="true"
- Включает патч на разделение сгруппированных PCI устройств в IOMMU, которые могут понадобиться вам отдельно.
По умолчанию также включен в linux-zen. Подробнее читайте - здесь.
Советуем включить если в будущем вы хотите выполнить операцию проброса вашей видеокарты в виртуальную машину.
Вот и все. Остальные настройки customizing.cfg вы можете выбрать по собственному предпочтению. После того как мы закончили с настройкой, можно перейти непосредственно к сборке и установке ядра::
makepkg -sric # Сборка и установка linux-tkg
Сборка ядра с помощью Clang + LTO¶
В разделе "Общее ускорение системы" мы уже говорили о преимуществах сборки пакетов при помощи компилятора Clang вместе с LTO оптимизациями. Но ядро требует отдельного рассмотрения, ибо те параметры которые мы указали ранее в makepkg.conf не работают для сборки ядра, и по прежнему будут применяться компиляторы GCC.
Чтобы активировать сборку ядра через Clang нужно:
Для ядра linux-xanmod экспортировать данную переменную окружения перед выполнением команды сборки:
export _compiler=clang
Для ядра linux-tkg в конфигурационном файле customization.cfg включить параметр _compiler="llvm" (В том же файле можно настроить применение LTO оптимизаций через параметр _lto_mode. О режимах LTO читайте далее).
Для всех остальных ядер, устанавливаемых из AUR (включая linux-lqx), нужно просто экспортировать переменные окружения LLVM=1 и LLVM_IAS=1 перед командой сборки:
export LLVM=1 LLVM_IAS=1 # Без переменной LLVM_IAS станет невозможным применение LTO оптимизаций makepkg -sric # Сборка и установка желаемого ядра
Теперь перейдем к настройке LTO оптимизаций. Для этого на этапе конфигурации вашего ядра зайдите в "General architecture-dependent options" -> "Link Time Optimization (LTO)" как показано на изображениях:
На последнем изображении показано окно выбора режима применения LTO оптимизаций. Этих режимов всего два:
Полный (Full): использует один поток для линковки, во время сборки медленный и использует больше памяти, но теоретически имеет наибольший прирост производительности в работе уже готового ядра.
Тонкий (Thin): работает в несколько потоков, во время сборки быстрее и использует меньше памяти, но может иметь более низкую производительность в итоге чем Полный (Full) режим.
Мы рекомендуем использовать "Полный (Full)" режим чтобы получить в итоге лучшую производительность.
Внимание
Сборка ядра через Clang работает только с версией ядра 5.12 и выше!
Больше подробностей по теме вы можете найти в данной статье: