Os desenvolvedores do projeto Multikernel, que permite executar várias instâncias independentes do núcleo em um único computador físico sem hipervisor e virtualização, apresentaram a ferramenta kmorph, que implementa meios para a rápida recuperação após uma falha do núcleo Linux ou para a substituição do núcleo em modo Live sem reinicialização completa. O projeto é desenvolvido por Cong Wang, que mantém a subsistema de controle de tráfego (TC, Traffic Control) no núcleo. O método de reinicialização rápida é baseado no pré-carregamento na memória de um núcleo de backup, que substitui o núcleo de trabalho principal em caso de falha ou quando é necessário atualizar para uma nova versão do núcleo.
A abordagem proposta permite evitar uma reinicialização completa e retomar o funcionamento quase instantaneamente, minimizando o tempo de inatividade. Atualmente, em caso de falha do núcleo, a reinicialização completa de grandes servidores leva vários minutos devido aos longos processos de inicialização de hardware, carregamento do ambiente do sistema e salvamento do despejo de memória do núcleo através do mecanismo kdump. Essencialmente, ao usar kdump, são executadas duas reinicializações do núcleo — inicialmente, um núcleo separado é carregado através do kexec para salvar o despejo de memória, após o qual o núcleo de trabalho é carregado e os serviços do sistema são iniciados.
No caso de aplicação do kmorph em associação a um núcleo específico da CPU, um núcleo Linux de backup e um ambiente de sistema mínimo são pré-carregados na memória, que monitora o estado do núcleo principal. Em caso de travamento ou entrada em estado de pânico do núcleo principal, o ambiente de backup assume o controle, salva o despejo de memória do núcleo com falha, transfere para si os núcleos de processador, a memória, os dispositivos, a configuração de rede e o sistema de arquivos.
A troca é coordenada por meio de dois programas: kmorph — executado no ambiente ativo, forma o conteúdo do ambiente de reserva e sincroniza o estado da rede nele; kmorphd — executado no ambiente de reserva e monitora o estado do ambiente ativo. Além da troca em caso de falha, é possível usar kmorph para atualizar o kernel sem a reinicialização tradicional. Para acelerar a recuperação no ambiente de reserva, além do kernel e de um conjunto mínimo de componentes do sistema em modo de espera, serviços típicos, como o nginx, podem ser inicializados. Nesse caso, no momento da ativação do ambiente de reserva, o serviço nginx já estará carregado na memória e começará a processar solicitações assim que a troca para o novo ambiente da interface de rede, ativação da configuração de rede e mudança do sistema de arquivos raiz ocorram.
Nos testes realizados, o servidor com nginx, por meio do kmorph, retoma a operação cerca de 2 segundos após a falha do kernel, mas no futuro pretendem alcançar uma troca instantânea imperceptível para os clientes conectados. Atualmente, o kmorph suporta as arquiteturas x86_64 e ARM64, e também está em andamento o suporte para RISC-V. A integração do kmorph nas distribuições Linux é realizada de maneira semelhante ao suporte do kdump, através das ferramentas padrão dracut, initramfs-tools, kernel-install e do serviço systemd.
O núcleo já inclui os mecanismos Kexec HandOver (KHO) e Live Update Orchestrator (LUO), que permitem iniciar um novo kernel a partir de um antigo sem perda do estado do sistema e sem interromper a operação dos dispositivos. Mas eles não podem ser aplicados em caso de falha do kernel, pois exigem a preservação do estado do kernel em execução. KHO e LUO também ficam atrás do kmorph em termos de velocidade de troca, pois no kmorph o novo kernel já está na memória, enquanto KHO e LUO exigem uma reinicialização do kernel através do kexec.
Fonte: opennet.ru
