Après 11 mois de développement, la version 4.3 de l'outil CRIU (Checkpoint and Restore In Userspace) a été publiée. Cet outil est conçu pour sauvegarder et restaurer des processus dans l'espace utilisateur. Il permet de conserver l'état d'un ou plusieurs processus, puis de reprendre le travail à partir de la position sauvegardée, y compris après un redémarrage du système ou sur un autre serveur sans rompre les connexions réseau établies. Le code du projet est écrit en C et est distribué sous la licence GPLv2. CRIU est utilisé dans des systèmes de gestion de conteneurs tels qu'OpenVZ, LXC/LXD et Docker. Les modifications nécessaires au fonctionnement de CRIU sont incluses dans la composition principale du noyau Linux.
Les applications de la technologie CRIU comprennent la possibilité de redémarrer le système d'exploitation sans interrompre l'exécution de processus longs, la migration à chaud de conteneurs isolés, l'accélération du démarrage de processus lents (il est possible de commencer à partir d'un état sauvegardé après l'initialisation), la mise à jour du noyau sans redémarrer les services, la sauvegarde périodique de l'état des tâches de calcul prolongées pour reprendre le travail en cas d'échec, l'équilibrage de charge sur les nœuds dans les clusters, la duplication de processus sur une autre machine (fork sur un système distant), et la création de snapshots d'applications utilisateur en cours d'exécution pour analyse sur un autre système ou en cas d'annulation d'actions ultérieures dans le programme.
Dans cette nouvelle version :
- La possibilité de compresser les blocs et les pages de mémoire en utilisant l'algorithme LZ4 avec décompression multithreading a été mise en œuvre.
- Les performances ont été améliorées grâce à l'utilisation d'E/S asynchrone (AIO) lors de la restauration des pages VMA (Virtual Memory Area), à un nouveau méthode d'arrêt des tâches sans utilisation de points d'arrêt matériels et à la parallélisation de la restauration de memfd et de la mémoire partagée anonyme.
- Ajout du support de l'extension ARM64 GCS (Guarded Control Stack), qui offre une protection matérielle des adresses de retour des fonctions. Après le transfert de contrôle à une fonction, les adresses de retour sont sauvegardées par le processeur non seulement dans la pile normale, mais aussi dans une pile fantôme séparée, qui ne peut pas être modifiée directement. Avant de sortir de la fonction, l'adresse de retour est extraite de la pile fantôme et vérifiée par rapport à l'adresse de retour de la pile principale.
- Ajout d'un backend pour la sauvegarde de l'état de l'API du pilote NVIDIA CUDA.
- Il est désormais possible de restaurer le mappage GPU.
- Pour le pilote amdgpu, la sauvegarde et la restauration de l'état des tampons de la sous-système DRM (Direct Rendering Manager) et des descripteurs de fichiers DMA-BUF ont été mises en œuvre.
- Ajout de commandes pour compresser et décompresser des images mémoire en mode hors ligne.
- Ajout de la prise en charge de la sauvegarde et de la restauration des informations sur la liaison des identifiants UID aux sockets réseau.
- Ajout de l'option « —image-io-mode » pour l'écriture et la lecture d'images de pages mémoire en mode O_DIRECT (en contournant le cache de pages).
Source : opennet.ru
