linux zen kernel что это
Kernel (Русский)
Ядро Linux — ядро операционной системы, соответствующее стандартам POSIX, составляющее основу операционных систем семейства Linux.
Дистрибутив Arch Linux основан на ядре Linux. Помимо основной стабильной (stable) версии в Arch Linux можно использовать некоторые альтернативные ядра. В статье описываются доступные в официальных репозиториях версии ядер, возможные патчи, а также способы, которыми пользователи могут скомпилировать собственное ядро.
Contents
Официальные ядра
Помощь при работе с официальными ядрами можно найти на форуме и в баг-трекере.
Компиляция
Скомпилировать собственное ядро можно двумя способами:
/Arch Build System Преимущества — наличие готового PKGBUILD для пакета linux и удобство системы управления пакетами. /Традиционная компиляция Ручная загрузка архива файлов с исходными кодами ядра и их компиляция.
Некоторые из перечисленных пакетов могут быть также доступны в двоичном виде в неофициальных репозиториях.
Ядра kernel.org
Неофициальные ядра
Отладка регрессий
Прежде всего проверьте ядро linux-mainline AUR на предмет того, не была ли проблема уже решена. В прикреплённом комментарии указан репозиторий с уже собранными ядрами, так что собирать ядро вручную не придётся.
Если проблема проявляется не слишком часто, то имеет смысл попробовать LTS-ядро ( linux-lts ). Старые версии LTS-ядер можно найти в архиве Arch Linux.
Zen Kernel — зачем ползать если можно летать?
Уже около месяца в моем Arch Linux крутится zen kernel. Довольно неплохо обработанное напильником, с кучей пачтей и дополнительных фич не входящих в ванильное ядро. Сегодня я расскажу что же оно есть такое и чуток углублюсь в дебри 🙂
Ядро Zen
Zen представляет собой вариант ядра Linux, который предназначен для настольных компьютеров. Это «исправленный» Linux для настольных/не-серверных систем, использует комбинацию нескольких проектов, обновляет код через git-репозиторий, а так же имеет несколько специфичных для Zen вещей стремящихся удовлетворить большинство потребностей пользователей реализовав их в одном ядре. Некоторые примеры слияния кодов это drm-next, wireless-testing, выбор планировщиков CPU (CFS/BFS), BFQ планировщик ввода-вывода, aufs, unionfs, reiser4, tuxonice, PHC, и многие другие замечательные вещи которые замечательно подойдут для улучшения настроек настольных или ноутбук систем или просто код улучшающий производительность настольных систем. Однако объединенный код может изменится в любой момент. Так же, «передовые технологии» такие как drm-next, wireless-testing, linux-2.6.git, или что-то другое по сути дела являющееся «передовыми разработками» слиты с кодом только в нестабильной ветке (zen.git).
Что включено в Zen-ядро?
Код включаемый в zen ядро может быть разным в разное время. Несколько примеров проектов которые были последовательно объединены с zen: bfs/zen-sched, bfq i/o планировщик, aufs, reiser4, tuxonice, smapi, linux PHC, mactel, gc-linux, fbcondecor, cko, и другие. Это не точный список того что указано на сайте, и он может изменяться от релиза к релизу.
Если вам интересно знать что включается в zen ядро в любой момент времени, посетите gitweb и прочитайте, или поищите в логах git. Интерфейс gitweb отображает все вносимые правки с пояснениями к ним, а так же все ветки которые существуют в дереве. Эта информация отображается для текущей ‘master’ ветки дерева и для любой существующей метки (вы так же можете вернуться назад и посмотреть старые релизы).
Как альтернатива этому — это подробная документация включающая даже документацию к проектам включенным в Zen ядро, она может быть найдена на странице Документации.
Отличие между zen.git и zen-stable.git
Zen-Stable.git
Zen.git
Вам не требуется клонировать оба zen-stable.git и zen.git если вам хочется использовать оба дерева одновременно! Прочитайте «Как переключаться между zen-stable и zen в одном древе»
Термоядерный синтез: Обзор патчей для Linux, не входящих в ванильное ядро
Содержание статьи
Есть много причин, по которым хорошую перспективную технологию могут не принимать в официальную ветку Linux — Линус славится своими жесткими требованиями к новому коду. Но от этого факта менее интересными такие технологии не становятся. И иногда ради них стоит пересобрать ядро с наложением стороннего патча.
Какими бывают линуксы
Ванильным (официальным) принято считать ядро, которое можно найти на kernel.org, и главным покровителем которого является сам Линус. На сайте можно скачать старое ядро ветки 2.4.x (которое уже практически не поддерживается) или несколько стабильных (или не очень 🙂 ) ядер ветки 2.6.x. Нестабильные ядра имеют суффикс «-rc», а ежедневные снапшоты из git’а – «rc-git». Обычно выходит 7-9 rc-релизов, прежде чем ядро обретает статус стабильного. В среднем, стабильные релизы выходят 4-5 раз в год, а последний на момент написания статьи релиз — 2.6.35.
linux-rt
Пожалуй, самый известный сторонний патч. Позволяет превратить обычный Linux в ОС реального времени. И хотя главное применение такой операционки – промышленные и встроенные системы, на обычном десктопе она тоже может быть интересна. Например, тем, кто часто занимается обработкой звука или видео или постоянно грузит систему какими-нибудь ресурсоемкими вычислениями. Встречаются также свидетельства о положительном эффекте от применения этого ядра на highload-серверах. Я же ничего, кроме слегка упавшей общей производительности системы, не заметил.
Скачать патч можно по адресу www.kernel.org/pub/linux/kernel/projects/rt/. Последняя стабильная версия – 2.6.33.6-rt27.
В некоторых дистрибутивах realtime-ядро уже присутствует в репозитории. Например, в Ubuntu для установки rt-ядра достаточно выполнить
$ sudo apt-get install linux-rt
В других же дистрибутивах ядро с этим патчем можно легко собрать. Для этого надо наложить патч на ванильное ядро и при конфигурировании указать опцию Processor type and features –> Preemption Mode (Complete Preemption (Real-Time)). И еще рекомендуется отключить опцию Kernel hacking –> Check for stack overflows, так как она повышает латентность. Чтобы можно было собирать некоторую статистику по времени отклика, при конфигурировании нужно также включить: Kernel hacking –> Tracers –> Kernel Function Tracer, Interrupts-off Latency Tracer, Interrupts-off Latency Histogram, Preemption-off Latency Traver, Preemption-off Latency Histogram, Scheduling Latency Tracer, Scheduling Latency Histogram, Missed timer offsets histogram.
После сборки ядро должно содержать в имени PREEMPT и RT, например:
#1 SMP PREEMPT RT Wed Aug 4 00:40:34 YEKST 2010
Чтобы потешить собственное самолюбие, можно включить сбор статистики:
# echo 1 >/sys/kernel/debug/tracing/latency_hist/enable/wakeup
Саму статистику смотрим тут:
Самое интересное там: значения минимального, среднего и максимального времени отклика.
Скачать исходники можно отсюда: www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/. После наложения патча (текущая версия – 2.6.34-ck1) станет доступна опция General Setup –> BFS cpu scheduler.
ReiserFS
Исходя из тестов и многочисленных отзывов, это очень быстрая файловая система. В настоящее время ее разработкой занимается наш соотечественник, Эдуард Шишкин, и группа энтузиастов. Эдуард полон оптимизма и решительности включить Reiser4 в ванильное ядро. Последний на момент написания статьи патч (reiser4-for-2.6.34.patch.gz) скачать можно здесь: ftp://ftp.kernel.org/pub/linux/kernel/people/edward/reiser4/reiser4-for-2.6/. После наложения патча появится опция File Systems –> Reiser4.
Но поддержка ядром ФС – это еще не все. Чтобы можно было оперировать с разделами reiser4, надо поставить reiser4progs. Во многих дистрибутивах этот комплект утилит есть в репозитории:
$ sudo apt-get install reiser4progs
Соответственно, основные операции с ФС:
Grsecurity
Патч, содержащий потрясающее количество механизмов для повышения защищенности Linux-системы. Опции компиляции grsecurity расположены в Security options –> Grsecurity. Есть три уровня безопасности на выбор: низкий, средний и высокий. Низкий уровень рекомендован, когда более высокие уровни не подходят из-за использования нестандартного набора ПО. Он содержит:
В среднем уровне защиты дополнительно добавятся технологии:
Высокий уровень еще больше затягивает узлы, так как дополнительно:
Необязательно в качестве Security Level выбирать один из имеющихся уровней. Есть вариант Custom, позволяющий отдельно выбрать все необходимые опции. Еще одна интересная опция Grsecurity –> Sysctl support позволит включать/отключать параметры безопасности через sysctl без необходимости пересобирать ядро. Так как эта директива отрицательно влияет на общую безопасность системы, ее рекомендуется использовать лишь в тестовых целях.
Помимо уровней безопасности, при конфигурации можно включить/отключить RBAC (Role Based Access Control) – управление доступом на основе ролей. Управление пользователями и их ролями осуществляется с помощью специальной утилиты gradm2, присутствующей в большинстве дистрибутивов:
$ sudo apt-get install gradm2
Zen-kernel
Zen-kernel – наверное, самая большая пачка заплаток ядра в одном месте. Позиционируется как быстрое ядро для десктопов. Получить zen-kernel можно тремя способами:
У них есть два репозитория: zen-stable.git (с патчами, наложенными на стабильное ядро) и zen.git (синхронизация с git-хранилищем Линуса и наложение тестовых патчей).
Набор сторонних патчей меняется от релиза к релизу и на данный момент включает в себя:
Универсальная сборка
Итак, ядро и патчи выбраны, можно приступать к сборке. Опишу сборку своего ядра на примере Ubuntu, хотя в других дистрибутивах последовательность действий будет аналогичной. Если нужно просто пересобрать имеющееся ядро (изменив опции конфигурации), то проще скачать исходники ядра с помощью стандартного менеджера пакетов твоего дистрибутива и собирать уже их:
$ sudo apt-get install linux-source
Но мне zen-kernel нравится больше, чем стандартное generic-ядро ubuntu, поэтому его и буду мучить. Поставим все, что может пригодиться для сборки:
$ sudo apt-get install build-essential libncurses5-dev \
libgtk2.0-dev libglade2-dev libqt3-mt-dev git-core
Добавим своего юзера в группу src, чтобы можно было без проблем собирать в /usr/src:
Клонируем git-репозиторий (приготовься скачать около 500 метров):
$ cd /usr/src
$ git clone git://zen-kernel.org/kernel/zen-stable.git linux-2.6-zen
Смотрим, какие ветки есть в репозитории:
$ git tag # кроме патченных, доступны также ванильные версии
Выбираем последнюю патченную версию:
$ git checkout v2.6.34-zen1
Сорцы не обязательно вытягивать из git. Если ты ограничен по трафику или скорости инета, то быстрее и дешевле будет скачать патч и официальное ядро. Заплатка накладывается следующим образом:
Утилита patch также имеет замечательную опцию ‘—dry-run’, позволяющую протестировать, как наложится патч, прежде чем его накладывать.
Далее выбираем способ конфигурирования ядра:
Мне больше привычен интерфейс menuconfig.
Какие-то конкретные советы по конфигурированию ядра давать сложно – все очень сильно зависит от имеющегося окружения и желаемых результатов. Но я всегда придерживаюсь нескольких простых правил:
С помощью опции «-j» можно указать количество потоков, что немного ускорит компиляцию на многоядерном процессоре. В зависимости от мощности компа и опций конфигурации, ядро может собираться по часу и даже больше. После компиляции начинается установка:
$ sudo make modules_install
$ sudo make install
На самом деле модули просто скопируются в /lib/modules/, а ядро с конфигом – в /boot.
Создаем initrd для нашего нового ядра:
Обновляем конфигурацию grub, чтобы он нашел новое ядро:
Все, можно идти в ребут, скрестив пальцы и затаив дыхание, загрузиться с новым ядром.
Компиляция. Debian-way
Выше я описал способ, которым можно собрать ядро в любом дистрибутиве. Но практически во всех дистрах есть свой путь, дающий те или иные плюшки, самая большая из которых — получение на выходе пакета с ядром, который можно легко поставить или удалить штатным пакетным менеджером.
В Debian/Ubuntu за сборку ядра отвечает make-kpkg. Для того, чтобы воспользоваться make-kpkg, установим один пакет:
$ sudo apt-get install kernel-package
Генерация конфига происходит точно так же, как и в способе выше, а сборка несколько иначе:
Эта команда сначала соберет ядро, а потом создаст два пакета: linux-image-version-revision.deb (бинарник и модули ядра) и linux-headers-version-revision.deb (заголовочные файлы ядра), которые будут лежать в /usr/src.
Ставим то, что получилось, и идем на перезагрузку:
make complete
К сожалению, журнал не резиновый, и рассказать получилось далеко не про все заслуживающие внимания патчи. За бортом остались OpenVZ и Xen, Openwall, а также целый класс патчсетов – дистрибутивные (ведь очень небольшое количество дистрибутивов использует ванильное ядро).
Скажи «нет!» ребуту
Допустим, у тебя есть высоконагруженный production-сервер, который должен быть доступен 24×7. Он отлично работает, да вот беда – вышел secutity-update ядра твоего дистрибутива, и надо бы перезагрузиться. Но ребут – это downtime сервера. И оставлять сервер с уязвимостью – тоже не дело. Придется искать второй сервер для временного переноса функционала с первого. Есть выход гораздо проще: можно обновлять ядро, не перезагружаясь, а используя ksplice.com – платный сервер обновлений для ядер распространенных дистрибутивов. Установка очень проста – добавляется репозиторий и ставится программулина uptrack. Потом делается
В общем, сказка, если б не одно «но» – все это работает только со стандартным ядром твоего дистра – никаких тебе патчей и обновлений версий ядра.
Турбо-компиляция
Далеко не всегда получается с первого раза собрать идеально работающее ядро – обязательно забудешь включить какой-нибудь модуль или наложить какой-нибудь патч. А новая сборка, особенно на маломощном компе, может быть раздражающе долгой. В таком случае на помощь придет ccache, умеющий кэшировать результаты компиляции. В результате повторная пересборка проходит значительно быстрее. Для использования ccache при сборке ядра набирай
$ make CC=»ccache gcc» CXX=»ccache g++»
Весь кэш будет храниться в каталоге
/.ccache, а статистику по его использованию можно посмотреть с помощью команды
Есть ли польза от кастомных ядер
Тесты
Arch Linux
Начнем с теста Arch Linux на нетбуке.
Результаты теста UnixBench на стандартном ядре (3.0-ARCH):
Test | Score | Unit | Time | Iters. | Baseline | Index |
---|---|---|---|---|---|---|
Dhrystone 2 using register variables | 3432673.5 | lps | 10.0 s | 7 | 116700.0 | 294.1 |
Double-Precision Whetstone | 821.7 | MWIPS | 10.2 s | 7 | 55.0 | 149.4 |
Execl Throughput | 1048.3 | lps | 29.7 s | 2 | 43.0 | 243.8 |
File Copy 1024 bufsize 2000 maxblocks | 120834.3 | KBps | 30.0 s | 2 | 3960.0 | 305.1 |
File Copy 256 bufsize 500 maxblocks | 36417.8 | KBps | 30.0 s | 2 | 1655.0 | 220.0 |
File Copy 4096 bufsize 8000 maxblocks | 290993.0 | KBps | 30.0 s | 2 | 5800.0 | 501.7 |
Pipe Throughput | 240124.9 | lps | 10.0 s | 7 | 12440.0 | 193.0 |
Pipe-based Context Switching | 21672.7 | lps | 10.0 s | 7 | 4000.0 | 54.2 |
Process Creation | 2885.9 | lps | 30.0 s | 2 | 126.0 | 229.0 |
Shell Scripts (1 concurrent) | 738.5 | lpm | 60.0 s | 2 | 42.4 | 174.2 |
Shell Scripts (8 concurrent) | 135.6 | lpm | 60.4 s | 2 | 6.0 | 226.1 |
System Call Overhead | 600176.7 | lps | 10.0 s | 7 | 15000.0 | 400.1 |
System Benchmarks Index Score: | 221.1 |
А вот тот же тест на pf-kernel (3.0-pf):
Test | Score | Unit | Time | Iters. | Baseline | Index |
---|---|---|---|---|---|---|
Dhrystone 2 using register variables | 3700926.6 | lps | 10.0 s | 7 | 116700.0 | 317.1 |
Double-Precision Whetstone | 846.1 | MWIPS | 10.2 s | 7 | 55.0 | 153.8 |
Execl Throughput | 1343.2 | lps | 29.6 s | 2 | 43.0 | 312.4 |
File Copy 1024 bufsize 2000 maxblocks | 127468.0 | KBps | 30.0 s | 2 | 3960.0 | 321.9 |
File Copy 256 bufsize 500 maxblocks | 37622.9 | KBps | 30.0 s | 2 | 1655.0 | 227.3 |
File Copy 4096 bufsize 8000 maxblocks | 342606.2 | KBps | 30.0 s | 2 | 5800.0 | 590.7 |
Pipe Throughput | 296672.7 | lps | 10.0 s | 7 | 12440.0 | 238.5 |
Pipe-based Context Switching | 41227.5 | lps | 10.0 s | 7 | 4000.0 | 103.1 |
Process Creation | 3969.3 | lps | 30.0 s | 2 | 126.0 | 315.0 |
Shell Scripts (1 concurrent) | 861.1 | lpm | 60.1 s | 2 | 42.4 | 203.1 |
Shell Scripts (8 concurrent) | 159.4 | lpm | 60.2 s | 2 | 6.0 | 265.6 |
System Call Overhead | 642005.3 | lps | 10.0 s | 7 | 15000.0 | 428.0 |
System Benchmarks Index Score: | 264.6 |
Как видно, общий прирост производительности составил 20%.
Ubuntu
Теперь результаты этих же тестов, но у же для Ubuntu.
На стандартном ядре (2.6.38-11-generic):
Test | Score | Unit | Time | Iters. | Baseline | Index |
---|---|---|---|---|---|---|
Dhrystone 2 using register variables | 39162082.2 | lps | 10.0 s | 7 | 116700.0 | 3355.8 |
Double-Precision Whetstone | 9143.1 | MWIPS | 9.9 s | 7 | 55.0 | 1662.4 |
Execl Throughput | 11472.2 | lps | 29.8 s | 2 | 43.0 | 2668.0 |
File Copy 1024 bufsize 2000 maxblocks | 1041722.3 | KBps | 30.0 s | 2 | 3960.0 | 2630.6 |
File Copy 256 bufsize 500 maxblocks | 327345.4 | KBps | 30.0 s | 2 | 1655.0 | 1977.9 |
File Copy 4096 bufsize 8000 maxblocks | 1730411.9 | KBps | 30.0 s | 2 | 5800.0 | 2983.5 |
Pipe Throughput | 4204868.3 | lps | 10.0 s | 7 | 12440.0 | 3380.1 |
Pipe-based Context Switching | 738528.0 | lps | 10.0 s | 7 | 4000.0 | 1846.3 |
Process Creation | 32309.9 | lps | 30.0 s | 2 | 126.0 | 2564.3 |
Shell Scripts (1 concurrent) | 11023.5 | lpm | 60.0 s | 2 | 42.4 | 2599.9 |
Shell Scripts (8 concurrent) | 1425.4 | lpm | 60.0 s | 2 | 6.0 | 2375.7 |
System Call Overhead | 5723850.3 | lps | 10.0 s | 7 | 15000.0 | 3815.9 |
System Benchmarks Index Score: | 2580.4 |
На pf ядре (2.6.38-pf8):
Test | Score | Unit | Time | Iters. | Baseline | Index |
---|---|---|---|---|---|---|
Dhrystone 2 using register variables | 71269301.5 | lps | 10.0 s | 7 | 116700.0 | 6107.1 |
Double-Precision Whetstone | 9175.2 | MWIPS | 9.9 s | 7 | 55.0 | 1668.2 |
Execl Throughput | 12014.6 | lps | 30.0 s | 2 | 43.0 | 2794.1 |
File Copy 1024 bufsize 2000 maxblocks | 1580881.5 | KBps | 30.0 s | 2 | 3960.0 | 3992.1 |
File Copy 256 bufsize 500 maxblocks | 428842.2 | KBps | 30.0 s | 2 | 1655.0 | 2591.2 |
File Copy 4096 bufsize 8000 maxblocks | 2315055.5 | KBps | 30.0 s | 2 | 5800.0 | 3991.5 |
Pipe Throughput | 4389021.4 | lps | 10.0 s | 7 | 12440.0 | 3528.2 |
Pipe-based Context Switching | 831655.8 | lps | 10.0 s | 7 | 4000.0 | 2079.1 |
Process Creation | 34789.6 | lps | 30.0 s | 2 | 126.0 | 2761.1 |
Shell Scripts (1 concurrent) | 11890.9 | lpm | 60.0 s | 2 | 42.4 | 2804.5 |
Shell Scripts (8 concurrent) | 1506.4 | lpm | 60.0 s | 2 | 6.0 | 2510.7 |
System Call Overhead | 5815793.6 | lps | 10.0 s | 7 | 15000.0 | 3877.2 |
System Benchmarks Index Score: | 3050.7 |
Прирост составил 18%, что на мой взгляд довольно ощутимо. Почему второй тест выдал чуть меньший результат? Скорее всего, дело в том, что тест проводился на x86_64 и в стандартном ядре было больше оптимизаций под архитектуру процессора, чем при ядре собранном под Pentium Pro на Intel Atom (SSE и прочие).
Как из этого всего видно, смысл в сборке своего ядра есть. Результаты примерно одинаковые на двух довольно разных процессорах: Intel Atom N270 и Core 2 Duo E8500.
Описывать процесс установки ядра для ARCH я не буду, он максимально прост. Я уверен, что для его пользователей это не составит труда.
Ядро Linux
Обновл. 29 Окт 2021 |
Как вы наверняка знаете, всё началось с того, что в 1991 году программист Линус Торвальдс решил создать свою собственную операционную систему, начав с самого главного компонента — её ядра — связующего «мостика» между программами и непосредственно аппаратной частью компьютера. В этой статье мы поговорим о том, что представляет собой ядро Linux с точки зрения обычного пользователя и какие существуют версии ядра дистрибутивов Linux.
Что такое ядро ОС? Типы ядер
Ядро — это своего рода главная программа, являющаяся основной частью операционной системы. Оно выступает в роли посредника между устройствами компьютера (процессором, видеокартой, оперативной памятью и т.д.) и его программным обеспечением, абстрагируя от обычных программ и пользователей сложную, низкоуровневую работу с «железом» компьютера, предоставляя взамен простой, понятный и удобный в использовании интерфейс. Для этого в код ядра включены драйверы устройств, которые могут как загружаться в память вместе с ядром ОС, так и подключаться по мере возникновения потребности в ресурсах необходимого устройства.
Как правило, большинство ядер ОС делятся на три типа:
Микроядро
Микроядро — это ядро, состоящее из нескольких подгружаемых в память по мере надобности независимых модулей, выполняющихся в отдельных адресных пространствах. По сути, в таком варианте исполнения оно не сильно отличается от обычных прикладных программ. К достоинствам данного ядра можно отнести теоретически большую надежность в сравнении с другими архитектурами (в действительности же не всё так радужно и гладко) и его модульность (легкость в подключении дополнительных частей ядра). К минусам микроядерной архитектуры относится то, что ядро, построенное по такой схеме, получается очень медленным (ведь ему нужно постоянно переключаться между отдельными частями).
небольшие требования к используемой памяти;
аппаратное обеспечение сильнее абстрагировано от системы;
аппаратное обеспечение может медленнее реагировать, поскольку драйверы находятся в пользовательском пространстве;
процессы не могут получить доступ к другим процессам без ожидания.
Монолитное ядро
Монолитное ядро — это полная противоположность микроядра, т.к. в памяти компьютера всегда находится весь (или почти весь) код ядра, вследствие чего скорость его работы выше в сравнении с микроядром. Монолитные ядра, как правило, лучше справляются с операциями доступа к оборудованию и многозадачностью, потому что, если программе нужно получить информацию из памяти или другого запущенного процесса, у нее есть прямая линия для доступа к ней, и программе не нужно ждать в очереди, чтобы сделать что-то. Однако такой подход может вызвать серьезные проблемы, потому что, чем больше процессов выполняется на уровне ядра, тем больше вероятность, что в случае непредвиденного поведения они создадут общий сбой вашей системы.
практически прямой доступ программ к оборудованию;
процессам проще взаимодействовать друг с другом;
если ваше устройство поддерживается ядром, никаких дополнительных установок ПО не потребуется;
процессы реагируют быстрее, потому что не требуется ожидания в очереди за процессорным временем.
большой размер ядра;
больший размер занимаемой памяти;
проблемы с безопасностью, т.к. все части работают в пространстве ядра.
Гибридное ядро
Гибридное ядро — это ядро, сочетающее в себе элементы как монолитной, так и микроядерной архитектур. У таких ядер есть возможность выбирать, какие части будут работать в пользовательском пространстве (например, драйверы устройств и система ввода-вывода файловой системы), а какие — в пространстве ядра (вызовы межпроцессного (IPC) и серверного взаимодействий). Но этот подход имеет и некоторые проблемы, унаследованные от микроядерной архитектуры (особенно, по части быстродействия).
разработчик может выбрать, какие программы будут работать в пользовательском пространстве, а какие — в пространстве ядра;
меньший размер в сравнении с монолитным ядром;
гибче в отличие от других ядер.
может страдать от пониженной производительности (как и микроядро);
работа драйверов устройств, как правило, сильнее зависит от производителей оборудования.
Ядро Linux хоть и относится к монолитным ядрам, но оно также заимствует и некоторые идеи из микроядерной архитектуры, что означает, что вся операционная система работает в пространстве ядра, а драйверы устройств (в виде модулей) могут быть легко загружены (или выгружены) прямо во время работы операционной системы.
Где находится ядро Linux?
Каждый раз во время запуска (или перезапуска) системы первым компонентом, который загружается в память компьютера, является ядро Linux.
В папке /boot вы также найдете и другие очень важные файлы:
img-[версия_ядра] — используется в качестве RAM-диска, в который распаковывается и с которого загружается ядро;
map-[версия_ядра] — используется для управления памятью до полной загрузки ядра;
config-[версия_ядра] — сообщает ядру, какие параметры и модули следует загрузить в образ ядра при его компиляции.
Когда Линус Торвальдс только начинал разрабатывать свое ядро, оно носило простое название — linux. С появлением технологии виртуальной памяти к ядру добавилась приставка vm (сокр. от «virtual memory»). Со временем ядро настолько разрослось, что к нему стали применять сжатие, об этом нам говорит буква z (от «zlib compression») в слове vmlinuz.
Примечание: Также для сжатия ядра часто применяются алгоритмы LZMA или bzip2, а сами ядра именуются zImage.
Модули ядра Linux
Что, если б в Windows уже содержались все доступные драйверы устройств, и вам просто нужно было задействовать некоторые из них? В этом, по сути, и заключен принцип загружаемых модулей ядра Linux (сокр. «LKM» от англ. «Loadable Kernel Module»). Они должны обеспечивать взаимодействие ядра со всем вашим оборудованием, и при этом не занимать всю доступную память.
Модули обычно расширяют базовые возможности ядра, связанные с различной работой устройств, файловых систем и системных вызовов. Они, как правило, имеют расширение .ko и обычно хранятся в каталоге /lib/modules:
В некоторых дистрибутивах, таких как Ubuntu, доступны модули сторонних производителей или с закрытым исходным кодом. Разработчики программного обеспечения (например, NVIDIA, AMD и др.) не предоставляют исходный код, а скорее создают свои собственные модули в виде предварительно скомпилированных .ko-файлов. Некоторые разработчики Linux считают, что такие закрытые модули «портят» своим присутствием ядро, предоставляя несвободное программное обеспечение, и не включают их в свои дистрибутивы.
Версии ядра дистрибутивов Linux
Stable
Stable — это последняя доступная стабильная версия ядра Linux, предназначенная для широкого круга использования. По умолчанию, в большинстве дистрибутивов Linux применяется именно stable-версия ядра. Она регулярно обновляется, и к ней довольно часто выпускаются новые патчи.
LTS (сокр. от «Long-Term Support») — это версия ядра с длительным сроком поддержки, которая считается более стабильной в сравнении с обычной версией ядра, т.к. при её разработке программисты стараются не экспериментировать с различными нововведениями. Однако из-за этого, LTS-версии ядра могут не иметь некоторых функций ядер более свежих релизов, а также содержать старые версии драйверов, несовместимых с более новым оборудованием. Жизненный цикл LTS-ядра, обычно, составляет 5 лет для настольных компьютеров и серверов (раньше для настольных компьютеров поддержка осуществлялась на протяжении 3 лет). Для сравнения, обычные релизы ядра имеют поддержку всего 9 месяцев с момента выпуска.
Несмотря на то, что исправления безопасности внедряются в LTS-версию так же часто, как и в обычную, она, тем не менее, не дает 100% гарантии отсутствия каких-либо ошибок. Правда, шанс того, что с LTS-версией ядра Linux возникнут какие-то проблемы, немного меньше по сравнению с обычной версией ядра Linux, и поэтому многие предприятия отдают предпочтение именно LTS-релизам.
Примечание: По данным компании Canonical, примерно 95% всех установок Ubuntu являются LTS-релизами.
Hardened
Hardened — это усиленная различными обновлениями безопасности stable-версия ядра Linux. Она умеет блокировать потенциально опасные операции, обеспечивая тем самым эффективную защиту от эксплойтов, нацеленных на использование уязвимостей ядра. Данная версия ядра не так популярна, как другие, из-за того, что несколько медленнее их. Hardened-ядро убивает любой процесс, который покажется ему потенциально опасным. Кроме этого, он не отображает PID процессов, и, следовательно, вы не сможете напрямую обратиться к запущенному исполняемому файлу. Также некоторые программы и функции могут не работать с hardened-ядром.
Zen — версия ядра Linux, ориентированная на повышение производительности и отзывчивости системы. Также говорят, что это лучшее ядро Linux для игр. Zen имеет низкую задержку и высокочастотный планировщик.
Установка/Обновление ядра Linux
В Linux есть исходное ядро, которое разработал Линус Торвальдс, а затем уже дополняли и дополняют другие разработчики и организации вместе с Линусом Торвальдсом. Расположено исходное ядро на сайте kernel.org.
Все дистрибутивы Linux (Debian, Ubuntu, Manjaro, CentOS и др.), которые начали появляться после публикации исходного ядра, стали вносить свои изменения и дополнения, формируя, таким образом, свой вариант исходного ядра Linux. Все Linux-дистрибутивы имеют в своей основе исходное ядро из kernel.org, но уже с внесенными в него соответствующими правками.
Примечание: Ядра разных дистрибутивов не являются взаимозаменяемыми. Теоретически, можно «подкинуть», например, ядро из Debian в Ubuntu. И система даже заработает (ведь Ubuntu произошла от Debian), но в 99% случаев начнут появляться разные глюки и баги.
Соответственно, из этого можно сделать следующие выводы:
Если вы хотите установить «чистое», оригинальное ядро Linux, то вам нужно скачать его с kernel.org, затем сконфигурировать на свое усмотрение и наслаждаться.
Если вам нужно ядро Linux с правками под какой-то конкретный дистрибутив (например, Debian или Manjaro), то вам нужно скачать ядро из репозитория конкретного дистрибутива с помощью менеджера пакетов.
Зачем тогда нужен kernel.org? Дело в том, что сначала свежая версия исходного ядра появляется на kernel.org, а затем уже «расходится» по репозиториям остальных дистрибутивов.
Есть 2 способа установки/обновления ядра Linux:
Обновление ядра Linux через менеджер пакетов.
На этом уроке мы рассмотрим обновление ядра Linux через менеджер пакетов, а на следующем — самостоятельную установку и конфигурирование ядра Linux.
Обновление ядра Linux через менеджер пакетов
Обычно, вместе с обновлением системы происходит и обновление ядра. Но если вы по каким-либо причинам хотите произвести установку/обновление непосредственно только ядра Linux, то ниже мы рассмотрим данный процесс для нескольких дистрибутивов Linux.
Linux Mint (Debian/Ubuntu)
Для начала сверим текущую установленную версию ядра:
Далее выполним поиск доступных для установки ядер (сгенерированный список может быть очень длинным, поэтому, чтобы хоть как-то ограничить вывод и сделать его постраничным, применим фильтр | more ):
$ sudo apt-cache search linux-image | more
Мой выбор пал на ядро linux-image-4.15.0-1004-oem. Чтобы его установить, нужно выполнить команду:
$ sudo apt-get install linux-image-4.15.0-1004-oem
Останется только перезагрузить систему и убедиться, что новое ядро успешно установилось:
Manjaro (Arch Linux)
В Manjaro используется свой менеджер пакетов — pacman, поэтому его команды будут немного отличаться от команд в других дистрибутивах. Чтобы вывести список доступных для установки ядер, необходимо выполнить:
$ sudo pacman –S linux
В рамке обведен список ядер, которые мы можем установить. Я выбрал пункт №5 (linux510), нажав соответствующую кнопку на цифровой клавиатуре. После этого запустился процесс скачивания необходимых пакетов. Когда всё будет готово, перезагружаем систему и радуемся новому ядру:
Установка ядра Zen (Liquorix)
Liquorix — это отдельный проект ядра, собранный из исходников zen-ядра, но с использованием лучшей конфигурации для повышения производительности системы.
Debian
Скачиваем скрипт, который добавит в систему нужные репозитории:
$ curl ‘https://liquorix.net/add-liquorix-repo.sh’ | sudo bash
После чего выполняем всего одну команду, устанавливающую пакеты с новым ядром:
$ sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
Ubuntu
Установка в Ubuntu происходит практически аналогичным образом. Сначала добавляем репозитории zen-ядра (liquorix):
sudo add-apt-repository ppa:damentz/liquorix && sudo apt-get update
После чего выполняем уже знакомую по прошлому разу команду:
sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
И теперь перезагружаем систему. Готово!
Manjaro
Сначала установим помощник установки пакетов — yay:
$ git clone https://aur.archlinux.org/yay.git
Далее установим необходимые утилиты:
$ sudo pacman –S base-devel
Заходим в каталог yay и производим сборку пакета:
После этого переходим непосредственно к установке zen-ядра:
Стоит отметить, что этот процесс может занять довольно большой отрезок времени. По его окончанию, перезагружаем систему и радуемся новому ядру.
Поделиться в социальных сетях:
Управление памятью в Linux. Физическая и Виртуальная память