Цифра › Софт3 мин чтения

Kmorph для Linux: резервное ядро берёт управление после сбоя примерно за секунду, без перезагрузки

Разработчик Linux Cong Wang представил экспериментальный Kmorph: заранее запущенное второе ядро принимает управление после сбоя без перезагрузки и ставит плановые обновления ядра.

Kmorph: a standby Linux kernel takes over after a crash in about one second, no reboot
Фото: lomazoma.com

Разработчик Linux Cong Wang представил Kmorph — экспериментальный инструмент, в котором заранее запущенное второе ядро принимает управление системой после сбоя, не перезагружая машину, сообщает lomazoma.com. lomazoma.comlomazoma.comlomazoma.comОткрыть источник ↗ По словам Wang, от обнаружения ошибки до работающего преемника проходит около одной секунды. В тестах подготовленный сервис Nginx снова отвечал на запросы в течение двух секунд после сбоя ядра. Kmorph требует ядра с расширениями multikernel и пока поддерживает x86-64 и ARM64.

Как происходит передача управления

Расширения multikernel позволяют запускать несколько ядер Linux параллельно на одной машине, у каждого свои процессоры, области памяти и устройства, гипервизор не нужен. Kmorph заранее запускает резервное ядро на нескольких свободно настраиваемых процессорах и части памяти. Работающий там демон следит за прежним ядром через vsock.

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

По желанию Kmorph записывает совместимый с kdump файл vmcore с содержимым памяти, регистрами процессоров и VMCOREINFO упавшего ядра. В отличие от обычного kdump, после сбоя не нужно загружать отдельное ядро для снятия дампа. lomazoma.comlomazoma.comlomazoma.comОткрыть источник ↗

Процессы прежнего ядра не продолжаются, поэтому пользовательское пространство обычно перезапускается. Выбранные сервисы можно вместо этого запустить в резервном ядре, например через standby = nginx.service. Такой сервис занимает порты до сбоя; при передаче управления резервное ядро получает сетевую карту, восстанавливает MAC-адрес, IP-адреса и маршруты и переключается на обычную корневую файловую систему через pivot_root. Остальные сервисы запускает systemd. Полностью непрерывную работу Wang называет целью разработки.

Ограничения и плановое обновление

Сервисы в резервном режиме сначала должны работать без дисков и доступа к сети и не должны записывать состояние, которое нужно сохранить. Сервисы с собственными пространствами имён монтирования, например через PrivateTmp= или ProtectSystem=, после переключения перезапускаются, если только отдельный файл настроек не ослабит их изоляцию.

Команда kmorph upgrade запускает передачу управления намеренно, пока прежнее ядро ещё работает: она заново передаёт сетевую конфигурацию, синхронизирует файловые системы, замораживает записываемые файловые системы на блочных устройствах и просит преемника принять управление. Так можно перейти на более новую версию ядра; дамп сбоя при этом не создаётся. lomazoma.comlomazoma.comlomazoma.comОткрыть источник ↗

Clement Verna опубликовал на форуме проекта Fedora дополнительную проверку: образ Fedora 45 bootc с ядром multikernel и Kmorph. Записи терминала показывают передачу управления после сбоя, вызванного через SysRq, и переход на новый образ с новой версией ядра. Тест шёл в виртуальной машине KVM с двумя vCPU и 16 GB ОЗУ на машине Graviton3 при отключённом SELinux. В такой сборке возможно лишь одно переключение за загрузку. Verna называет её проверкой концепции и предостерегает от использования в production.

Источники · 1

Нашли ошибку?
  1. ↩

Читайте также

Далее

Следующая статья откроется сама

Ещё
Мы в соцсетях

Введите хотя бы две буквы — результаты появятся сразу

↑↓выбрать↵открытьescзакрыть