De ontwikkelaars van het Multikernel-project, waarmee meerdere onafhankelijke exemplaren van de kernel op één fysieke computer kunnen worden uitgevoerd zonder hypervisors en virtualisatie, hebben het kmorph-hulpmiddel geïntroduceerd. Dit biedt middelen voor snel herstel na een crash van de Linux-kernel of voor het vervangen van de kernel in Live-modus zonder een volledige herstart. Het project wordt geleid door Cong Wang, die het traffic control (TC) subsysteem in de kernel beheert. De methode voor snelle herstart is gebaseerd op het vóórladen van een reservekernel in het geheugen, die de primaire werkkernel vervangt in het geval van een storing of wanneer een vervangende versie van de kernel nodig is.
De voorgestelde aanpak maakt een volledige herstart overbodig en stelt ons in staat om het werk bijna onmiddellijk te hervatten, waardoor de stilstandtijd tot een minimum wordt beperkt. Momenteel duurt een volledige herstart van grote systemen bij een crash van de kernel enkele minuten door langdurige hardware-initialisatieprocessen, het laden van de systeemomgeving en het opslaan van het geheugen dump van de kernel met behulp van de kdump-mechanisme. servers Bij gebruik van kdump worden er in feite twee herstarts van de kernel uitgevoerd — eerst wordt er via kexec een afzonderlijk exemplaar van de kernel geladen om het geheugen dump op te slaan, waarna de werkkernel wordt geladen en de systeemdiensten worden gestart.
Bij het gebruik van kmorph in combinatie met een afzonderlijke CPU-kern wordt er een reservekernel van Linux en een minimale systeemomgeving vooraf in het geheugen geladen, die de status van de primaire kernel volgt. In het geval van een vastloper of het in een panic-toestand raken van de primaire kernel, neemt de reserveomgeving de controle over, slaat het geheugen dump van de onwerkende kernel op, schakelt de processor kernen, geheugen, apparaten, netwerkconfiguratie en FS over naar zichzelf.
De overschakeling wordt gecoördineerd met behulp van twee programma's: kmorph — dat draait in de actieve omgeving, de inhoud van de reserveomgeving vormt en de status van het netwerk daarin synchroniseert; kmorphd — dat draait in de reserveomgeving en de status van de actieve omgeving volgt. Naast de overschakeling in geval van een storing, biedt kmorph ook de mogelijkheid om de kernel bij te werken zonder het traditionele opnieuw opstarten. Om het herstel in de reserveomgeving te versnellen, kunnen naast de kernel en een minimum aan systeemcomponenten in de waakstand typische services worden gestart, zoals nginx. In dit geval zal de service nginx al in het geheugen zijn geladen op het moment dat de reserveomgeving wordt geactiveerd en onmiddellijk beginnen met het verwerken van aanvragen na de overschakeling naar de nieuwe omgeving van de netwerkkaart, de activering van de netwerconfiguratie en de wijziging van het root-bestandssysteem.
In de uitgevoerde tests herstelt de server met nginx met behulp van kmorph zich ongeveer 2 seconden na een kernelstoring, maar in de toekomst is het de bedoeling om onmiddellijke overschakeling te bereiken zonder dat dit merkbaar is voor aangesloten klanten. Momenteel ondersteunt kmorph de architeitcturen x86_64 en ARM64, en er wordt gewerkt aan de ondersteuning van RISC-V. De integratie van kmorph in Linux-distributies gebeurt op een vergelijkbare manier als de ondersteuning van kdump, via de standaardtools dracut, initramfs-tools, kernel-install en de systemd-service.
De kernel bevat al mechanismen zoals Kexec HandOver (KHO) en Live Update Orchestrator (LUO), die het mogelijk maken om een nieuwe kernel vanuit een oude uit te voeren zonder het systeem te verstoren en zonder de apparaten te stoppen. Maar ze kunnen niet worden toegepast bij een kernelstoring, omdat ze voor de opslag van de status van de actieve kernel vereisen. KHO en LUO zijn ook trager dan kmorph in termen van overschakelingssnelheid, omdat de nieuwe kernel al in het geheugen is geladen, terwijl KHO en LUO een herstart van de kernel via kexec vereisen.
Bron: opennet.ru
