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.
Этих режимов всего два:
Полный (Full):
_lto_mode=full
- использует один поток для линковки, во время сборки медленный и использует больше памяти, но теоретически имеет больший прирост производительности в работе уже готового ядра.Тонкий (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
. И так далее.