Les développeurs du projet Multikernel, qui permet d'exécuter plusieurs instances indépendantes du noyau sur un seul ordinateur physique sans hyperviseur ni virtualisation, ont présenté l'outil kmorph, qui fournit des moyens pour un redémarrage rapide après un arrêt accidentel du noyau Linux ou pour remplacer le noyau en mode live sans redémarrage complet. Le projet est mené par Cong Wang, qui gère le sous-système de contrôle de trafic (TC, Traffic Control) dans le noyau. La méthode de redémarrage rapide repose sur le préchargement en mémoire d'un noyau de secours, qui remplace le noyau de travail principal en cas de défaillance ou en cas de nécessité de mise à jour vers une nouvelle version du noyau.
L'approche proposée permet d'éviter un redémarrage complet et de reprendre le travail presque instantanément, minimisant ainsi le temps d'arrêt. À l'heure actuelle, en cas d'arrêt accidentel du noyau, un redémarrage complet des grandes serveurs systèmes prend plusieurs minutes en raison des longs processus d'initialisation du matériel, de chargement de l'environnement système et de sauvegarde du dump mémoire du noyau via le mécanisme kdump. En fait, l'utilisation de kdump nécessite deux redémarrages du noyau : d'abord, à travers kexec, un instance distincte du noyau est chargée pour conserver le dump mémoire, après quoi le noyau de travail est chargé et les services système sont lancés.
Lorsque kmorph est appliqué à un noyau CPU distinct, un noyau Linux de secours et un environnement système minimal sont préalablement chargés en mémoire, qui surveille l'état du noyau principal. En cas de blocage ou d'état de panique du noyau principal, l'environnement de secours prend le contrôle, sauvegarde le dump mémoire du noyau défaillant, redirige les cœurs de processeur, la mémoire, les périphériques, la configuration réseau et le système de fichiers.
Le basculement est coordonné par deux programmes : kmorph — lancé dans l'environnement actif, il forme le contenu de l'environnement de secours et synchronise l'état du réseau ; kmorphd — lancé dans l'environnement de secours, il surveille l'état de l'environnement actif. En plus du basculement en cas de panne, kmorph permet également de mettre à jour le noyau sans redémarrage traditionnel. Pour accélérer la récupération dans l'environnement de secours, en plus du noyau et d'un ensemble minimal de composants système, des services standards tels que nginx peuvent être lancés en mode veille. Dans ce cas, au moment de l'activation de l'environnement de secours, le service nginx sera déjà chargé en mémoire et commencera immédiatement à traiter les demandes après le basculement vers le nouvel environnement de la carte réseau, l'activation de la configuration réseau et le changement du système de fichiers racine.
Lors des tests effectués, le serveur avec nginx à l'aide de kmorph reprend son activité environ deux secondes après un plantage du noyau, mais à l'avenir, nous visons à obtenir un basculement instantané, imperceptible pour les clients connectés. Actuellement, kmorph prend en charge les architectures x86_64 et ARM64, et des travaux sont en cours pour ajouter la prise en charge de RISC-V. L'intégration de kmorph dans les distributions Linux se fait analogiquement au support de kdump, via les outils standards dracut, initramfs-tools, kernel-install et le service systemd.
Le noyau intègre déjà des mécanismes Kexec HandOver (KHO) et Live Update Orchestrator (LUO), permettant de lancer un nouveau noyau à partir de l'ancien sans perdre l'état du système et sans arrêter le fonctionnement des périphériques. Cependant, ils ne peuvent pas être utilisés en cas de panne du noyau, car ils nécessitent pour sauvegarder l'état du noyau en cours d'exécution. KHO et LUO sont également moins rapides que kmorph en raison du fait qu'avec kmorph, le nouveau noyau est déjà en mémoire, alors que KHO et LUO nécessitent un redémarrage du noyau via kexec.
Source : opennet.ru
