Лучшие модифицированные ядра Linux
Ядро Linux – это основа любого дистрибутива, а учитывая их количество, нет ничего удивительного в том, что разработчики модифицируют его под себя. Большая часть дистрибутивов содержит патчи для лучшей совместимости со своими компонентами.
Есть и такие ядра, которые также модифицируют, но при этом не привязывают к определённому дистрибутиву. О таких ядрах и пойдёт речь. Одни из них повышают производительность, другие снижают задержки, третьи нацелены на высокий уровень безопасности. В этой статье мы собрали самые интересные модифицированные ядра Linux.
Table of Contents
- Лучшие модифицированные ядра Linux
- 1. pf-kernel
- 2. XanMod
- 3. Kernel-rt
- 4. Grsecurity
- 5. Zen-kernel
- 6. Linux-Libre
Лучшие модифицированные ядра Linux
1. pf-kernel
Ядро pf-kernel содержит в себе несколько значимых патчей. Вот некоторые из них:
- патч для лучшей работы компилятора GCC;
- патч против утечек памяти;
- патч для создания виртуальных видеоустройств (полезно при проведении стримов);
- патч BBR для эффективной обработки пакетов TCP;
- и множество других более мелких улучшений.
Ядро примечательно тем, что имеются сборки для различных архитектур процессоров. Конечно, большой прибавки производительности это не даст, но на некоторых ноутбуках такое ядро позволит более эффективно использовать энергосберегающие функции.
2. XanMod
Ядро реального времени не сделает из Linux настоящую операционную систему реального времени (ОС РВ), но поможет приблизиться к этому. Оно нужно для того, чтобы минимизировать задержки от момента поступления прерывания и до выполнения команды и гарантировать минимальное значение этих задержек.
Современное ядро и без модификаций способно обеспечить задержку в районе 1 мс, но при этом могут проскакивать значения в районе 10-100 мс. Это может быть критично при звукозаписи, обработке сетевых пакетов или сигналов с критически важных датчиков.
Есть две реализации ОС РВ: патч preempt_rt (он включён по умолчанию в ядре 5.15, а также в модифицированных ядрах, вроде XanMod-rt), опирающийся на стандарт POSIX и запуск ядра Linux поверх микроядра Cobalt или Mercury (фреймворк Xenomai) или же наноядра Adeos (RTAI).
Xenomai показывает хорошие результаты, снижая джиттер до минимума. RTAI напротив, пытается получить минимально возможные задержки, при этом их колебания будут сильнее. И в том, и в другом случае надо модифицировать драйвер устройства. С патчем preempt_rt достаточно лишь внести коррективы в саму программу, повысив приоритет потоков, но остальные, менее важные компоненты системы станут менее отзывчивыми.
4. Grsecurity
Grsecurity — это набор патчей для ядра, призванных повысить его безопасность. Основной компонент — PaX, он модифицирует код таким образом, что закрывается целый ряд атак. Он защищает выделенную под код память, делая её не перезаписываемой. Если какая-то программа попытается внести изменения в эту область памяти, то она немедленно будет закрыта. Также область данных не может содержать исполняемый код, а сами страницы памяти записываются в произвольном месте.
Такой подход не может защитить от самих атак, но сделает их неэффективными. Например, переполнение буфера не приведёт к возможности изменить код, и даже получить данные едва ли получится, так как результат практически невозможно предсказать.
Это ядро будет полезно в первую очередь на серверах, стоит учесть и то, что оно распространяется по подписочной системе. Стоимость подписки составляет около 200 долларов в месяц. Также можете рассмотреть SELinux, однако, это ядро в основном направлено на разграничение прав доступа к файлам и регулирование сетевых политик.
5. Zen-kernel
Zen-kernel не может похвастать большим количеством существенных отличий от стандартного ядра. Ранее его ставили для того, чтобы использовать альтернативный планировщик BFS, а затем MuQSS. К сожалению, ни тот ни другой больше не разрабатываются, о прекращении развития последнего стало известно совсем недавно 4 сентября 2021 года.
Планировщик действительно был полезен, особенно в работе с играми. Если же вам нужно ядро, оптимизированное под работу с эмуляторами консолей и Wine, то обратите своё внимание на kernel-tkg, но учтите, что патчи рассчитаны преимущественно на процессоры Intel.
На Zen-kernel также основано ядро Liquorix. Оно практически идентично, за тем лишь исключением, что применено несколько патчей для лучшей совместимости с Debian.
6. Linux-Libre
Многие из вас знают о том, что ядро Linux разрабатывается по лицензии GNU GPL, что обуславливает открытость кода. Но при этом в ядре содержатся драйверы устройств, и не всегда есть возможность получить драйвер с открытым кодом. В результате в ядре появляются кляксы (блобы), улучшающие поддержку устройств, но представляющие потенциальную опасность.
Ядро Linux-Libre содержит только открытый код, разработчики исключили из его состава все проприетарные и обфусцированные драйверы. Таким образом ядро соответствует требованиям проекта GNU и может стать основой свободной операционной системы GNU.
На практике такое ядро крайне сложно использовать. У Linux и без этого не лучшая поддержка драйверов, а с этим ядром придётся тщательно выбирать комплектующие для компьютера. Например, вы не сможете использовать графику AMD или Nvidia. Несмотря на то, что есть открытые драйверы Mesa и Nouveau, базовый драйвер видеокарт закрыт.
Выводы
Как видите, модифицированные ядра создаются для разных целей. Для игр неплохим решением станут XanMod или TKG-pds. Для серверов подойдут ядра pf-kernel и Grsecurity, хотя последнее вряд ли применимо для малого бизнеса.
Ядра реального времени совсем скоро утратят свою актуальность, так как необходимые изменения внесены в последнюю версию оригинального ядра. В любом случае эти ядра не рассчитаны на повышение производительности, их цель — гарантированное выполнение команд за отведённое время.
За последнее десятилетие модифицированные ядра частично утратили свою актуальность. Многие патчи были перенесены в основную ветку ядра. Прошли те времена, когда такие ядра давали прирост 10-20%. Но технологии не стоят на месте, меняются запросы бизнеса и пользователей. Это позволяет создавать новые патчи с учётом потребностей рынка.
И помните, не только ядро может повысить производительность и отзывчивость системы. Есть множество других способов внести коррективы в её работу, например, замена стандартных библиотек, в ряде случаев на musl libC показывает хорошие результаты.
CHERTS / change_kernel_on_ubuntu.txt
Clone via HTTPS Clone with Git or checkout with SVN using the repository’s web address.
Learn more about clone URLs
Как установить/удалить/выбрать нужное ядро на Ubuntu
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Установить нужное ядро в Ubuntu ——————————- KERNEL_BUILD=91 apt-get install linux-headers-4.15.0-$ linux-headers-4.15.0-$-generic linux-image-4.15.0-$-generic linux-modules-4.15.0-$-generic linux-modules-extra-4.15.0-$-generic Удалить не нужное более ядро в Ubuntu ————————————- KERNEL_BUILD=140 apt-get remove linux-headers-4.15.0-$ linux-headers-4.15.0-$-generic linux-image-4.15.0-$-generic linux-modules-4.15.0-$-generic linux-modules-extra-4.15.0-$-generic —purge Установить нужное нам ядро основным при загрузке ———————————————— 1. Смотрим номер позиции нужного ядра в меню GRUB grep «menuentry ‘Ubuntu,» /boot/grub/grub.cfg | sed ‘s/^[ \t]*//;s/[ \t]*$//’ | awk -F»‘» » | awk » Пример вывода: 0 Ubuntu, с Linux 4.15.0-142-generic 1 Ubuntu, с Linux 4.15.0-142-generic (recovery mode) 2 Ubuntu, с Linux 4.15.0-124-generic 3 Ubuntu, с Linux 4.15.0-124-generic (recovery mode) 2. Смотрим параметр GRUB_DEFAULT cat /etc/default/grub | grep GRUB_DEFAULT Как правило будет GRUB_DEFAULT=0 3. Меняем GRUB_DEFAULT в /etc/default/grub на (например) GRUB_DEFAULT=»1>2″ , где вторая цифра после > это и есть номер позиции из п.1 В данном случае мы будем грузить ядро Linux 4.15.0-124-generic 4. Обновляем конфигурацию загрузчика update-grub Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Изменение загружаемого по умолчанию ядра в Ubuntu Linux
При установке системных обновлений в виртуальной машине с Ubuntu Server 14.04 32-bit я столкнулся с ситуацией, когда вновь установленное в систему ядро Linux не смогло загрузиться. Если система была установлена с загрузчиком GRUB, то в процессе каждой загрузки у нас есть возможность вручную выбрать ядро (предполагается, что при обновлении мы сохранили старое работоспособное ядро), которое будет загружено.
Когда процесс загрузки отобразит меню GRUB, выберем пункт меню Advanced options for Ubuntu


В появившемся списке доступных для загрузки ядер Linux выберем предыдущее ядро, с которым загрузка ВМ проходила успешно до обновления (в моём случае это ядро версии 3.13.0.-24).
Однако при следующей перезагрузке системы без ручного вмешательства в процесс загрузки, загрузчик GRUB всё-равно запустит более новое ядро, так как оно назначено в качестве ядра по умолчанию. Для того, чтобы переопределить загружаемое по умолчанию ядро, запомним позицию нужного нам ядра в списке GRUB (в моём случае это 2 позиция с учётом того, что нумерация идёт с 0). Загрузим систему, вручную выбрав нужное ядро, и отредактируем конфигурационный файл GRUB:
sudo nano /etc/default/grub
В файле отредактируем строчку, как описано здесь , указав индекс нужных позиций структуры меню GRUB, чтобы добраться до ядра, которое будет загружаться по умолчанию (первая цифра означает позицию меню первого уровня, вторая – второго уровня соответственно):
GRUB_DEFAULT #c0504d">1>2"
Сохраним изменения в файле и обновим информацию в самом загрузчике:
sudo update-grub
Перезагрузим сервер и убедимся в том, что система успешно запускается c нужным нам ядром:
uname -r 3.13.0-24-generic
Установка ядер серии 5 и выше
Установка актуальных версий ядер серии 5 и выше возможна с помощью метапакетов linux-X.X с номером, соответствующим номеру модификации ядра:
- linux-5.4 — установка ядра 5.4 в вариантах generic и hardened;
- linux-5.10 — установка ядра 5.10 в вариантах generic и hardened;
- linux-5.15 — установка ядра 5.15 в вариантах generic, hardened, lowlatency;
- linux-6.1 (доступен начиная с обновления БЮЛЛЕТЕНЬ № 2023-1023SE17 (оперативное обновление 1.7.5) — установка ядра 6.1 в варианте generic.
Кроме этого, метапакеты для каждой модификации ядра представлены в следующих вариантах:
- linux-X.X-generic — установка ядра в варианте generic;
- linux-X.X-hardened — установка ядра в варианте hardened;
- linux-X.X-lowlatency — установка ядра в варианте lowlatency (для обновлений, в которых такой вариант присутствует).
При установке любого из этих метапакетов будут установлены новейшие версии указанной модификации ядра и соответствующие им пакеты, необходимые для автоматической интеграции нового ядра с пакетами Astra Linux.
Метапакеты могут быть установлены с помощью Графический менеджер пакетов synaptic или из командной строки командой apt с указанием названия устанавливаемого метапакета, например, для ядра 5.10:
sudo apt install linux-5.10
sudo apt install linux-5.10-generic
sudo apt install linux-5.10-hardenedПолучение списка установленных ядер
Получить список установленных ядер можно командой:
dpkg —list | grep «linux-image-»
Получение версии загруженного ядра
Получить версию и вариант ядра, загруженного в работающей ОС, можно командой:
На момент последнего обновления настоящей статьи:
- В составе Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10:
- До установки оперативных обновлений доступно ядро модификации 5.4;
- Ядро модификации 5.10 доступно после установки обновления БЮЛЛЕТЕНЬ № 2021-1126SE17 (оперативное обновление 1.7.1);
- Ядро модификации 5.15 доступно после установки обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2);
- Ядро модификации 6.1 доступно после установки обновления БЮЛЛЕТЕНЬ № 2023-1023SE17 (оперативное обновление 1.7.5);
- В Astra Linux Special Edition РУСБ.10152-01 (очередное обновление 4.7) без установленных оперативных обновлений доступно ядро модификации 5.4;
- Ядро модификации 5.10 доступно после установки обновления БЮЛЛЕТЕНЬ № 2021-0915SE47MD (оперативное обновление 4.7.1);
- Ядро модификации 5.15 доступно после установки обновления БЮЛЛЕТЕНЬ № 2022-0926SE47 (оперативное обновление 4.7.2);
- Ядро модификации 5.4 доступно начиная с обновления 2.12.40;
- Ядро модификации 5.10 доступно начиная с обновления 2.12.43;
- Ядро модификации 5.15 доступно начиная с обновления 2.12.45;
Обновление ядер и удаление неиспользуемых ядер
При установке обновлений автоматическое обновление установленных ядер выполняется в пределах одной модификации. То есть, например, установленное ядро модификации 5.4 и версии 54 (linux-image-5.4.0-54-hardened) будет обновлено до версии 110 (linux-image-5.4.0-110-hardened), но не до ядра 5.10 или 5.15.
При установке обновлений с помощью astra-update для каждой модификации автоматически удаляются старые версии ядер кроме двух последних версий и загруженного ядра.
После загрузки с использованием нового ядра для удаления неиспользуемых ядер серий 4.* и 5.* можно использовать следующий сценарий:
pkgs=`dpkg -l 2> /dev/null | egrep «^ii\s*linux-image-[456]\.[[:digit:]]+\.[[:digit:]]+-[[:digit:]]+-» | cut -d » » -f3 | grep -v ^linux-image-$(uname -r | cut -d ‘-‘ -f1-2)`
[ -n «$pkgs» ] && apt remove $pkgs
rm -f /boot/old-*