Após 11 meses de desenvolvimento, foi lançado o conjunto de ferramentas CRIU 4.3 (Checkpoint and Restore In Userspace), destinado a salvar e restaurar processos no espaço do usuário. A ferramenta permite salvar o estado de um ou mais processos e, em seguida, retomar o trabalho a partir da posição salva, mesmo após reinicialização do sistema ou em outro servidor, sem interromper as conexões de rede já estabelecidas. O código do projeto foi escrito em C e é distribuído sob a licença GPLv2. O CRIU é utilizado em sistemas de gerenciamento de contêineres como OpenVZ, LXC/LXD e Docker. As modificações necessárias para o funcionamento do CRIU foram incluídas no núcleo principal do Linux.
As áreas de aplicação da tecnologia CRIU incluem a garantia de reinicialização do sistema operacional sem interromper a continuidade da execução de processos de longa duração, migração ao vivo de contêineres isolados, aceleração do início de processos lentos (é possível começar a partir de um estado salvo após a inicialização), atualização do núcleo sem reiniciar serviços, salvamento periódico do estado de tarefas computacionais de longa duração para retomar o trabalho em caso de falha, balanceamento de carga em nós de clusters, duplicação de processos em outra máquina (fork para um sistema remoto), criação de instantâneas de aplicativos de usuário em funcionamento para análise em outro sistema ou caso seja necessário reverter ações posteriores no programa.
No novo lançamento:
- Foi implementada a possibilidade de compressão de blocos e páginas de memória usando o algoritmo LZ4 e descompressão multithread.
- O desempenho foi aprimorado com a utilização de entrada/saída assíncrona (AIO) na restauração de páginas VMA (Área de Memória Virtual), um novo método de parada de tarefas sem o uso de pontos de interrupção de hardware e paralelização da restauração de memfd e memória anônima compartilhada.
- Suporte foi adicionado à extensão ARM64 GCS (Guarded Control Stack), que fornece proteção de hardware para endereços de retorno de funções. Após a transmissão do controle para a função, os endereços de retorno são salvos pelo processador não apenas na pilha normal, mas também em uma pilha sombra separada, que não pode ser alterada diretamente. Antes de sair da função, o endereço de retorno é extraído da pilha sombra e comparado com o endereço de retorno da pilha principal.
- Um backend foi adicionado para salvar o estado da API do driver NVIDIA CUDA.
- Foi garantida a restauração do mapeamento da GPU.
- Para o driver amdgpu, foi implementada a salvação e restauração do estado dos buffers do subsistema DRM (Direct Rendering Manager) e descritores de arquivos DMA-BUF.
- Foram adicionados comandos para compressão e descompressão de imagens de memória em modo offline.
- Suporte foi adicionado para salvar e restaurar informações sobre a vinculação de identificadores UID a sockets de rede.
- Uma opção «—image-io-mode» foi adicionada para gravação e leitura de imagens de páginas de memória no modo O_DIRECT (bypass do cache de páginas).
Fonte: opennet.ru
