7. Кастомные ядра#

Прежде чем мы начнем, хотелось бы прояснить такой вопрос: "А зачем вообще нужны эти кастомные ядра?". Чтобы дать ответ на данный вопрос, стоит понимать, что ядро Linux является определенным универсальным стандартом в мире операционных систем, который одинаково подходит как для домашнего ПК, ноутбука, телефона, так и для сервера, роутера, микро-контроллера. То есть, ядро по умолчанию является швейцарским ножом, позволяющим применять себя в разных задачах, но при этом не быть лучшим в чём-то конкретном. Нет, это не значит, что на ванильном ядре вы не сможете запустить какую-то игру, скажем через Wine или Proton, но такой опыт не будет самым лучшим, т.к. за такую многопрофильность ядру приходится платить меньшей производительностью в определенных задачах. Кастомное же ядро подразумевает определенную заточенность под что-то конкретное, делая упор на что-то одно. В нашем случае это производительность и игры, а также улучшение опыта использования Linux на домашнем ПК или ноутбуке. В этом нам и помогут нижеперечисленные ядра вместе с их правильной настройкой.

И ещё просим вас заранее установить стабильное linux-lts ядро. В случае возникновения проблем вы всегда сможете откатиться на эту версию ядра.

Проверка ядра используемого в данный момент осуществляется следующей командой: uname -r.

7.1. О выборе ядра#

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

7.2. Достойные внимания#

7.2.1. linux-zen#

Zen ядро - это плод коллективных усилий по объединению патчей улучшающих опыт домашнего использования Linux, но при этом работающих стабильно и не ломающих совместимость с теми или иными вещами.

Это отличный выбор для неискушенного пользователя, что не ставит задачи в получении максимальной производительности и покорении максимальной планки FPS. Рекомендуется установить всем, кто не хочет сильно париться с компиляцией и настройкой других ядер. Ядро можно установить из репозиториев, ибо оно имеет официальную поддержку дистрибутивом.

Из основных улучшений:

  • Улучшено поведение планировщика EEVDF для значительного снижения задержек в несколько раз.

  • Поддержка модулей NTSync

  • Поддержка алгоритма BBRv3

  • Применение оптимальных настроек для сохранения отзывчивости системы

I. Установка

sudo pacman -S linux-zen linux-zen-headers

# Если у вас не GRUB - используйте команду обновления вашего загрузчика
sudo grub-mkconfig -o /boot/grub/grub.cfg

7.2.2. linux-tkg#

Ядро с высокой степенью гибкости, благодаря возможности собрать ядро с разного рода патчами - с набором множества патчей на улучшение производительности в игрушках. Предоставляет выбор в сборке ядра с разными планировщиками. Грубо говоря, это ядро сборная солянка из всех остальных ядер с большим набором патчей.

I. Установка и настройка:

git clone https://github.com/Frogging-Family/linux-tkg.git
cd linux-tkg

Есть две возможности предварительной настройки linux-tkg: либо через редактирование файла customization.cfg, либо через терминал по ходу процесса установки. Мы выбираем первое и отредактируем customization.cfg:

nano customization.cfg

Итак, настройка здесь достаточно обширная поэтому мы будем останавливаться только на интересующих нас настройках:

_version="6.12" - Здесь выбираем версию ядра которую мы хотим установить. Выбирайте самую последнюю из доступных.

_modprobeddb="false" - Опция отвечающая за сборку мини-ядра. Подробнее о нем вы можете узнать в соответствующем разделе. Если хотите собрать мини-ядро - пишите "true", если нет - "false".

_cpusched="bore" - Выбор CPU планировщика ядра. К выбору предоставляется довольно много планировщиков, но мы советуем обратить ваше внимание только на некоторых из них: "bore", "cfs" (планировщик по умолчанию до 6.6), "eevdf"(по умолчанию с 6.6).

Предупреждение

Автор рекомендует использовать только планировщик EEVDF или BORE. PDS и BMQ могут вызывать множественные регрессии производительности и приводить к случайным зависаниям системы. Последние версии PDS также не имеют полноценной поддержки NUMA и PSI, последний нужен для правильной работы OOM киллеров и Waydroid.

Подробнее: Frogging-Family/linux-tkg#722 Frogging-Family/linux-tkg#701 Frogging-Family/linux-tkg#695 alfredchen/linux-prjc#67 alfredchen/linux-prjc#71 alfredchen/linux-prjc#80 alfredchen/linux-prjc#62 alfredchen/linux-prjc#104 alfredchen/linux-prjc#105 https://codeberg.org/ventureo/ARU/pulls/91 Frogging-Family/linux-tkg

_ntsync="true" - Включает сборку специального модуля NTSync, который отвечает за реализацию примитивов синхронизации как в Windows. Должно использоваться в связке со специально собранным Wine, подробнее см. Установка Wine-TKG.

_ftracedisable="true" - Отключает лишние трекеры для отладки ядра.

_acs_override="true" - Включает патч на разделение сгруппированных PCI устройств в IOMMU, которые могут понадобиться вам отдельно. По умолчанию есть в linux-zen. Подробнее читайте - здесь. Советуем включить если в будущем вы хотите выполнить операцию проброса вашей видеокарты в виртуальную машину.

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

_processor_opt="native_intel" - Установит флаги для сборки ядра нативно под ваш процессор Intel.

_processor_opt="native_amd" - Установит флаги для сборки ядра нативно под ваш процессор AMD.

В разделе Базовое ускорение системы мы также говорили о преимуществах сборки пакетов при помощи компилятора Clang вместе с LTO оптимизациями. Но ядро требует отдельного рассмотрения, ибо те параметры которые мы указали ранее в makepkg.conf не работают для сборки ядра, и потому по прежнему будут применяться компиляторы GCC.

Чтобы активировать сборку ядра через Clang применением LTO оптимизаций нужно:

Установить значение _compiler="llvm" и выбрать желаемый режим LTO. Этих режимов всего два:

  1. Полный (Full): _lto_mode=full - использует один поток для линковки, во время сборки медленный и использует больше памяти, но теоретически имеет больший прирост производительности в работе уже готового ядра.

  2. Тонкий (Thin): _lto_mode=thin - работает в несколько потоков, во время сборки быстрее и использует меньше памяти, но может иметь более низкую производительность в итоге чем Полный (Full) режим.

Автор рекомендует использовать "Полный (Full)" режим чтобы получить в итоге лучшую производительность.

Вот и все. Остальные настройки customization.cfg вы можете выбрать по собственному предпочтению. После того как мы закончили с настройкой, можно перейти непосредственно к сборке и установке ядра:

makepkg -sric # Сборка и установка linux-tkg

7.2.3. linux-cachyos#

linux-cachyos - добротная альтернатива всем остальным ядрам, также нацеленная на максимальную производительность вашей системы. По субъективным ощущениям автора работает лучше чем TKG. Предлагает на выбор множество планировщиков CPU. Сочетает в себе патчи которые уже были описаны для других ядер. А именно:

  • Использует планировщик BORE, заточенный для повышения производительности в условиях большой нагрузки на CPU

  • По умолчанию собирается с использованием LLVM/Clang

  • Поддержка алгоритм для обработки сетевых пакетов BBRv3

  • Поддержка модуля NTSync

  • Свежая встроенная в ядро версия библиотеки сжатия zstd

Отдельным плюсом является быстрая обновляемость и оперативные исправления ошибок, чем к сожалению не всегда может похвастаться linux-tkg.

Установка I.

А вот тут не все так просто, ибо прежде чем мы начнем, стоит оговориться, что у этого ядра есть вариации с тремя разными планировщиками. Это: EEVDF с поддержкой sched-ext (по умолчанию) и BORE. Автор рекомендует остановиться на BORE и EEVDF, как на наиболее проверенных решениях. Но вы можете попробовать и другие варианты. Далее я буду выполнять команды для установки ядра с BORE, но соответственно вы можете писать вместо bore любой другой. Если вы устанавливаете вариант с поддержкой sched-ext, то перед сборкой ядра следует также установить пакет scx-scheds из AUR во избежание проблем с зависимостями после установки ядра:

git clone https://github.com/CachyOS/linux-cachyos.git  # Скачиваем исходники
cd linux-cachyos/linux-cachyos
makepkg -sric

Данное ядро немного умнее других, поэтому определяет архитектуру вашего процессора и автоматически указывает компилятору собирать себя именно под неё. Т.е. нативная компиляция здесь есть по умолчанию, так что в принципе вы можете не сильно заморачиваться с настройкой ядра или вовсе пропустить данный шаг. Но все таки, если у вас есть собственные предпочтения относительно определенных параметров вашего ядра, то вы всегда можете включить ручную настройку через nconfig используя переменную окружения _makenconfig=y перед выполнением команды makepkg: export _makenconfig=y.

Установка II (бинарные пакеты)

Бинарную версию ядра можно получить либо через подключение стороннего репозитория, либо скачав уже готовый пакет опять с того же репозитория, но не подключая его. Со вторым всё просто, переходите на данный сайт: https://mirror.cachyos.org/repo/x86_64/cachyos/ и ищите версию ядра которая вам по вкусу. Потом устанавливаете через sudo pacman -U (в конце пишете путь до скаченного файла).

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

sudo pacman-key --recv-keys F3B607488DB35A47 --keyserver keyserver.ubuntu.com
sudo pacman-key --lsign-key F3B607488DB35A47
sudo pacman -U 'https://mirror.cachyos.org/repo/x86_64/cachyos/cachyos-keyring-20240331-1-any.pkg.tar.zst' \
             'https://mirror.cachyos.org/repo/x86_64/cachyos/cachyos-mirrorlist-18-1-any.pkg.tar.zst'    \
             'https://mirror.cachyos.org/repo/x86_64/cachyos/cachyos-v3-mirrorlist-18-1-any.pkg.tar.zst' \
             'https://mirror.cachyos.org/repo/x86_64/cachyos/cachyos-v4-mirrorlist-6-1-any.pkg.tar.zst'  \
             'https://mirror.cachyos.org/repo/x86_64/cachyos/pacman-6.1.0-7-x86_64.pkg.tar.zst'

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

Поэтому сначала проверим, поддерживает ли ваш процессора архитектуру x86_64v3:

/lib/ld-linux-x86-64.so.2 --help | grep "x86-64-v3 (supported, searched)"

Если вывод команды НЕ пустой, то ваш процессор поддерживает x86_64_v3.

Пропишем репозиторий в /etc/pacman.conf:

sudo nano /etc/pacman.conf

Теперь, если у вас ЕСТЬ поддержка x86_64v3, то пишем следующее:

# Спускаемся в самый низ файла и пишем:
[cachyos-v3]
Include = /etc/pacman.d/cachyos-v3-mirrorlist

Если же нет, то:

# Спускаемся в самый низ файла и пишем:
[cachyos]
Include = /etc/pacman.d/cachyos-mirrorlist

После этого выполните обновление системы и вы сможете установить бинарное ядро:

sudo pacman -Syyuu

После этого тоже ставим пакет в соответствии с желаемым планировщиком: sudo pacman -S linux-cachyos. Или sudo pacman -S linux-cachyos-bore. И так далее.