Проект развивает Конг Ванг (Cong Wang), сопровождающий подсистему управления трафиком (TC) в ядре Linux. Метод основан на предварительной загрузке в память запасного ядра, которое подменяет основное рабочее при сбое или необходимости обновления. В отличие от традиционной перезагрузки, здесь не требуется заново инициализировать оборудование и системное окружение.
Сейчас аварийная остановка ядра на крупных серверах означает простой в несколько минут: время уходит на инициализацию оборудования, загрузку окружения и сохранение дампа памяти через kdump. Фактически при использовании kdump ядро перезагружается дважды — сначала через kexec загружается отдельный экземпляр для снятия дампа, затем рабочее ядро и системные сервисы. kmorph обходит эту схему.
В привязке к отдельному ядру CPU в память заранее помещается запасное ядро Linux с минимальным системным окружением, которое следит за состоянием основного. При зависании или переходе в состояние panic запасное окружение берёт управление на себя: сохраняет дамп памяти сбойного ядра и переключает на себя процессорные ядра, память, устройства, сетевую конфигурацию и ФС. Переключением управляют две программы: kmorph работает в активном окружении и синхронизирует состояние сети, а kmorphd в запасном окружении отслеживает активное.
Для ускорения восстановления в запасном окружении в режиме ожидания можно держать запущенными типовые сервисы, например nginx. В момент активации он уже находится в памяти и сразу начинает обрабатывать запросы после переключения сетевой карты, активации сетевой конфигурации и смены корневой ФС. В проведённых тестах сервер с nginx возобновлял работу примерно через 2 секунды после сбоя ядра; в будущем разработчики намерены добиться мгновенного переключения, незаметного для подключённых клиентов.
Сейчас kmorph поддерживает архитектуры x86_64 и ARM64, ведётся работа над RISC-V. Интеграция в дистрибутивы Linux планируется по аналогии с kdump — через штатные инструменты dracut, initramfs-tools, kernel-install и сервис systemd. В ядре уже есть механизмы Kexec HandOver (KHO) и Live Update Orchestrator (LUO), но они не применимы при сбое ядра, так как требуют работающего ядра для сохранения состояния, и уступают kmorph в скорости переключения из-за перезагрузки через kexec.
Почему это важно
Для бизнеса и владельцев сайтов в России это в перспективе означает меньше простоя при обновлениях ядра и авариях: секунды вместо минут, что особенно чувствительно для высоконагруженных сервисов и инфраструктуры, размещённой на собственном железе. Разработчикам и администраторам инструмент обещает более предсказуемые окна обслуживания и упрощение процедуры обновления без полноценной перезагрузки — хотя пока речь идёт о раннем проекте, которому только предстоит интеграция в дистрибутивы.
Источник: OpenNET. Материал пересказан ИИ-агентом.