Engenheiros da Google publicaram para discussão entre os desenvolvedores do kernel Linux um conjunto de patches com a implementação do subsistema Live Update Orchestrator (LUO), destinado à atualização do kernel em modo Live. Diferente de mecanismos como livepatch, Ksplice, kpatch e kGraft, o novo sistema não se limita à aplicação de correções individuais a um kernel Linux em funcionamento, mas permite reiniciar e atualizar o kernel completamente sem interromper o funcionamento de dispositivos individuais. O projeto é baseado em um conjunto de patches KHO (Kexec HandOver) para o mecanismo kexec, utilizado para carregar um novo kernel a partir de um kernel Linux já em execução sem reinicialização física.
A principal área de aplicação do LUO são ambientes de nuvem, onde será possível atualizar o hipervisor KVM sem interromper a operação em execução. máquinas virtuaisEm particular, será possível suspender máquinas virtuais durante a reinicialização do kernel com o hipervisor, mantendo todos os dispositivos anexados às máquinas virtuais em funcionamento.
Para viabilizar essa possibilidade, o LUO fornece recursos para salvar o estado dos dispositivos antes da mudança para o novo kernel e restaurar esse estado imediatamente após a ativação do novo kernel, de forma que as operações contínuas do sistema e dos aplicativos no espaço do usuário com dispositivos não sejam interrompidas. O processo de reinicialização do kernel também garante a continuidade das operações executadas com DMA e a atividade relacionada ao tratamento de interrupções.
Para coordenar a preservação do estado e a troca para o novo kernel, o LUO oferece uma API que permite a outros subsistemas do kernel conectar manipuladores para rastrear e participar do processo de reinicialização ao vivo. Entre os subsistemas que podem se integrar ao LUO, estão o hipervisor KVM, iommu, sistema de interrupções e drivers. Para transferir o estado da memória do kernel antigo para o novo, é utilizado o KHO (Kexec HandOver). O gerenciamento é feito através dos arquivos sysfs '/sys/kernel/liveupdate/{state, prepare, finish}'.
Fonte: opennet.ru
