Команда разработчиков проекта Multikernel представила открытый проект под названием kmorph. Это решение для быстрого восстановления после аварийной остановки ядра Linux. Также этот инструмент предназначен для замены ядра Linux в Live‑режиме без полноценной перезагрузки.

Проект kmorph развивает сопровождающий подсистему управления трафиком (TC, Traffic Control) в ядре Linux Конг Ванг (Cong Wang).

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

По информации OpenNET, предложенный в kmorph подход позволяет обойтись без полноценной перезагрузки ядра и почти мгновенно возобновить работу ПК, сведя к минимуму время простоя. В настоящее время в случае аварийной остановки работы ядра Linux полная перезагрузка ПК или серверов занимает до нескольких минут из‑за длительных процессов инициализации оборудования, загрузки системного окружения и сохранения дампа памяти ядра через механизм kdump. По сути при использовании kdump выполняется две перезагрузки ядра — вначале через kexec загружается отдельный экземпляр ядра для сохранения дампа памяти, после чего выполняется загрузка рабочего ядра и запуск системных сервисов.

При использовании kmorph в привязке к отдельному ядру процессора в память заранее загружается запасное ядро Linux и минимальное системное окружение, которое отслеживает состояние основного ядра. В случае зависания или впадение в состояние паники (panic) основного ядра, запасное окружение берёт управление на себя, сохраняет дамп памяти сбойного ядра, переключает на себя процессорные ядра, память, устройства, сетевую конфигурацию и файловую систему.

Переключение координируется при помощи двух программных инструментов:

  • kmorph — запускается в активном окружении, формирует начинку запасного окружения и синхронизирует в нём состояние сети;

  • kmorphd — запускается в запасном окружении и отслеживает состояние активного окружения.

Помимо переключения в случае аварии, в kmorph предоставляется возможность использования решения для обновления ядра без традиционной перезагрузки. Для ускорения восстановления в запасном окружении помимо ядра и минимального набора системных компонентов в режиме ожидания в kmorph могут запускаться типовые сервисы, такие как nginx. В этом случае в момент активации запасного окружения сервис nginx уже будет загружен в память и сразу начнёт обрабатывать запросы после переключения в новое окружения сетевой карты, активации сетевой конфигурации и смены корневой ФС.

В проведённых разработчиками тестах kmorph сервер с nginx возобновляет работу примерно через две секунды после сбоя ядра. В будущем в команде проекта намерены добиться мгновенного переключения незаметно для подключённых клиентов.

В настоящее время в kmorph поддерживаются архитектуры x86_64 и ARM64, а также ведётся работа над поддержкой RISC‑V. Интеграция kmorph в дистрибутивы Linux осуществляется по аналогии с поддержкой kdump, через штатные инструменты dracut, initramfs‑tools, kernel‑install и сервис systemd.

В состав ядра Linux уже входят механизмы Kexec HandOver (KHO) и Live Update Orchestrator (LUO), позволяющие запускать новое ядро из старого без потери состояния системы и без остановки работы устройств. Но они не могут применяться в случае сбоя в ядре, так как требуют для сохранения состояния работающего ядра. KHO и LUO также отстают от kmorph по скорости переключения из‑за того, что в kmorph новое ядро уже находится в памяти, а KHO и LUO требуют перезагрузки ядра через kexec.

Комментарии (0)