Los desarrolladores del proyecto Multikernel, que permite ejecutar múltiples instancias independientes del núcleo en una sola computadora física sin hipervisor y sin virtualización, han presentado la herramienta kmorph, que implementa medios para una rápida recuperación después de la parada de emergencia del núcleo de Linux o para reemplazar el núcleo en modo Live sin necesidad de un reinicio completo. El proyecto es desarrollado por Cong Wang, quien mantiene el subsistema de control de tráfico (TC, Traffic Control) en el núcleo. El método de reinicio rápido se basa en la carga previa en la memoria de un núcleo de respaldo, que reemplaza al núcleo principal en caso de falla o cuando es necesario actualizar a una nueva versión del núcleo.
El enfoque propuesto permite evitar un reinicio completo y reanudar el funcionamiento casi de inmediato, minimizando el tiempo de inactividad. Actualmente, en caso de una parada de emergencia del núcleo, el reinicio completo de grandes servidores toma varios minutos debido a los prolongados procesos de inicialización del hardware, la carga del entorno del sistema y la conservación del volcado de la memoria del núcleo a través del mecanismo kdump. De hecho, al utilizar kdump se realizan dos reinicios del núcleo: primero se carga una instancia separada del núcleo a través de kexec para guardar el volcado de memoria, y luego se carga el núcleo de trabajo y se inician los servicios del sistema.
En el caso de aplicar kmorph en relación con un núcleo CPU específico, un núcleo de Linux de respaldo y un entorno mínimo del sistema se cargan previamente en la memoria, que monitorea el estado del núcleo principal. En caso de que el núcleo principal se cuelgue o entre en estado de pánico, el entorno de respaldo toma el control, guarda el volcado de memoria del núcleo fallido, y transfiere sobre sí los núcleos del procesador, la memoria, los dispositivos, la configuración de red y el sistema de archivos.
El cambio se coordina mediante dos programas: kmorph — se ejecuta en el entorno activo, forma el contenido del entorno de respaldo y sincroniza el estado de la red; kmorphd — se inicia en el entorno de respaldo y monitorea el estado del entorno activo. Además del cambio en caso de falla, se ofrece la posibilidad de usar kmorph para actualizar el núcleo sin reiniciar tradicionalmente. Para acelerar la recuperación en el entorno de respaldo, además del núcleo y un conjunto mínimo de componentes del sistema, se pueden iniciar en espera servicios típicos como nginx. De este modo, en el momento de la activación del entorno de respaldo, el servicio nginx ya estará cargado en memoria y comenzará a procesar solicitudes inmediatamente después del cambio al nuevo entorno de la tarjeta de red, activación de la configuración de red y cambio del sistema de archivos raíz.
En las pruebas realizadas, el servidor con nginx mediante kmorph reanuda su funcionamiento aproximadamente 2 segundos después de un fallo del núcleo, pero en el futuro se busca lograr un cambio instantáneo sin que los clientes conectados lo noten. Actualmente, kmorph soporta arquitecturas x86_64 y ARM64, y se está trabajando en la compatibilidad con RISC-V. La integración de kmorph en las distribuciones de Linux se realiza de manera similar a la compatibilidad con kdump, a través de las herramientas estándar dracut, initramfs-tools, kernel-install y el servicio systemd.
El núcleo ya incluye mecanismos Kexec HandOver (KHO) y Live Update Orchestrator (LUO), que permiten ejecutar un nuevo núcleo desde un antiguo sin perder el estado del sistema y sin detener el funcionamiento de los dispositivos. Sin embargo, no pueden aplicarse en caso de un fallo en el núcleo, ya que requieren la conservación del estado del núcleo en funcionamiento. KHO y LUO también son más lentos que kmorph en cuanto al cambio, ya que kmorph tiene el nuevo núcleo ya cargado en memoria, mientras que KHO y LUO requieren un reinicio del núcleo mediante kexec.
Fuente: opennet.ru
