Gli sviluppatori del progetto Multikernel, che consente di eseguire più istanze indipendenti del kernel su un unico computer fisico senza hypervisor e virtualizzazione, hanno presentato lo strumento kmorph, che implementa mezzi per un recupero rapido dopo un arresto anomalo del kernel Linux o per la sostituzione del kernel in modalità Live senza un riavvio completo. Il progetto è guidato da Cong Wang, che gestisce il sottosistema di controllo del traffico (TC, Traffic Control) nel kernel. Il metodo di riavvio rapido si basa sul caricamento preventivo in memoria di un kernel di riserva, che sostituisce il kernel principale in caso di guasto o quando è necessario aggiornare il kernel a una nuova versione.
L'approccio proposto consente di evitare un riavvio completo e di riprendere quasi istantaneamente le operazioni, riducendo al minimo il tempo di inattività. Attualmente, in caso di arresto anomalo del kernel, il riavvio completo di sistemi di grandi dimensioni server richiede diversi minuti a causa dei lunghi processi di inizializzazione dell'hardware, caricamento dell'ambiente di sistema e salvataggio del dump di memoria del kernel tramite il meccanismo kdump. Fondamentalmente, utilizzando kdump vengono eseguiti due riavvii del kernel: inizialmente, tramite kexec, viene caricato un'istanza separata del kernel per salvare il dump di memoria, dopodiché viene avviato il kernel di lavoro e avviati i servizi di sistema.
Nel caso di utilizzo di kmorph collegato a un kernel CPU specifico, un kernel di riserva Linux e un minimo ambiente di sistema vengono caricati in memoria in anticipo, in modo da monitorare lo stato del kernel principale. In caso di blocco o di panico del kernel principale, l'ambiente di riserva prende il controllo, salva il dump di memoria del kernel difettoso, e cambia il controllo dei core della CPU, della memoria, delle periferiche, della configurazione di rete e del file system.
Il passaggio è coordinato tramite due programmi: kmorph — si avvia nell'ambiente attivo, forma il contenuto dell'ambiente di riserva e sincronizza lo stato della rete; kmorphd — si avvia nell'ambiente di riserva e monitora lo stato dell'ambiente attivo. Oltre al passaggio in caso di guasto, è possibile utilizzare kmorph per aggiornare il kernel senza un riavvio tradizionale. Per accelerare il ripristino nell'ambiente di riserva, oltre al kernel e al minimo insieme di componenti di sistema in modalità standby, possono essere avviati servizi tipici, come nginx. In questo caso, al momento dell'attivazione dell'ambiente di riserva, il servizio nginx sarà già caricato in memoria e inizierà subito a gestire le richieste dopo il passaggio al nuovo ambiente della scheda di rete, l'attivazione della configurazione di rete e il cambio del file system radice.
Nei test condotti, un server con nginx tramite kmorph riprende a funzionare circa 2 secondi dopo un guasto del kernel, ma in futuro si prevede di ottenere un passaggio istantaneo invisibile per i clienti connessi. Attualmente, kmorph supporta le architetture x86_64 e ARM64, e sono in corso lavori per supportare RISC-V. L'integrazione di kmorph nei pacchetti Linux avviene in modo simile al supporto di kdump, attraverso gli strumenti standard dracut, initramfs-tools, kernel-install e il servizio systemd.
Nel kernel sono già inclusi meccanismi Kexec HandOver (KHO) e Live Update Orchestrator (LUO), che consentono di avviare un nuovo kernel da uno vecchio senza perdita di stato del sistema e senza fermare il funzionamento dei dispositivi. Tuttavia, non possono essere utilizzati in caso di guasto del kernel, poiché richiedono che lo stato del kernel in funzione venga salvato. KHO e LUO sono anche più lenti di kmorph nel passaggio, poiché in kmorph il nuovo kernel è già in memoria, mentre KHO e LUO richiedono un riavvio del kernel tramite kexec.
Fonte: opennet.ru
