Представлен kmorph для быстрого восстановления после сбоя или обновления ядра Linux - QubStore

Представлен kmorph для быстрого восстановления после сбоя или обновления ядра Linux

Конг Ванг (Cong Wang), мейнтейнер подсистемы Traffic Control в ядре Linux, анонсировал kmorph — утилиту для практически мгновенного возврата системы в строй после краха ядра или подмены ядра «на лету» без классической перезагрузки.

Инструмент вырос из проекта Multikernel, который даёт возможность крутить на одной физической машине несколько независимых экземпляров ядра — и всё это без гипервизора и виртуализации. Идея kmorph проста по сути и хитра в реализации: запасное ядро вместе с минимальным системным окружением заранее держат в памяти, и оно присматривает за основным. Если рабочее ядро зависло или свалилось в panic, резерв перехватывает управление, снимает дамп памяти упавшего ядра и забирает себе процессорные ядра, память, устройства, сетевую конфигурацию и файловые системы.

За координацию отвечают две программы. kmorph работает в активном окружении: готовит начинку для резервного и синхронизирует в нём сетевые настройки. kmorphd живёт в запасном окружении и следит за состоянием активного. Помимо аварийного сценария, связку можно использовать и для обновления ядра без традиционной перезагрузки.

Контекст проблемы понятен любому, кто администрировал крупные серверы: при крахе ядра полная перезагрузка растягивается на минуты — инициализация железа, подъём системного окружения, сохранение дампа через kdump. С kdump ядро фактически перезагружается дважды: сначала через kexec поднимается отдельный экземпляр для снятия дампа, потом грузится рабочее ядро и стартуют сервисы. kmorph обходит эту карусель. Чтобы восстановление было ещё быстрее, в резервном окружении можно держать наготове типовые сервисы вроде nginx: в момент переключения он уже в памяти и сразу берётся за запросы, как только активируется сетевая карта, применится конфигурация сети и сменится корневая ФС. В тестах сервер с nginx возвращался к работе примерно через 2 секунды после сбоя ядра, хотя в планах — переключение мгновенное и незаметное для подключённых клиентов.

Сейчас поддерживаются архитектуры x86_64 и ARM64, идёт работа над RISC-V. В дистрибутивы kmorph встраивается по образцу kdump — через штатные dracut, initramfs-tools, kernel-install и systemd. В ядре уже есть механизмы Kexec HandOver (KHO) и Live Update Orchestrator (LUO), позволяющие запустить новое ядро из старого без потери состояния системы и остановки устройств, однако при сбое ядра они бесполезны: им нужно работающее ядро, чтобы сохранить состояние. К тому же KHO и LUO проигрывают kmorph в скорости переключения — у kmorph новое ядро уже лежит в памяти, а им требуется перезагрузка через kexec.

Ссылка на основную публикацию