After 11 months of development, the release of CRIU 4.3 (Checkpoint and Restore In Userspace) has been published. This tool is designed for saving and restoring processes in user space. It allows the state of a single process or a group of processes to be saved and then resumed from that saved position, including after a system reboot or on another server without breaking established network connections. The project's code is written in C and is distributed under the GPLv2 license. CRIU is applied in container management systems such as OpenVZ, LXC/LXD, and Docker. Required changes for CRIU are included in the mainline Linux kernel.
The areas of application for CRIU technology include ensuring OS reboot without disrupting the continuity of long-running processes, live migration of isolated containers, speeding up the start of slow processes (you can begin work from a state saved after initialization), performing kernel updates without restarting services, periodically saving the state of long-running computational tasks for resuming work in case of crashes, load balancing on nodes in clusters, duplicating processes to another machine (fork to a remote system), and creating snapshots of user applications during operation for analysis on another system or in case further actions in the program need to be undone.
In the new release:
- The ability to compress memory blocks and pages using the LZ4 algorithm with multithreaded unpacking has been implemented.
- Performance has been enhanced by utilizing asynchronous input/output (AIO) during the restoration of Virtual Memory Area (VMA) pages, a new method for stopping tasks without using hardware breakpoints, and parallelizing the restoration of memfd and anonymous shared memory.
- Support for the ARM64 GCS (Guarded Control Stack) extension has been added, providing hardware protection for return addresses from functions. After control is handed over to a function, the return addresses are saved by the processor not only in the regular stack but also in a separate shadow stack, which cannot be directly altered. Before exiting the function, the return address is extracted from the shadow stack and verified against the return address from the main stack.
- A backend has been added for saving the state of the NVIDIA CUDA driver API.
- Restoration of GPU mapping has been ensured.
- For the amdgpu driver, saving and restoring the state of the DRM (Direct Rendering Manager) subsystem buffers and DMA-BUF file descriptors has been implemented.
- Commands for compressing and decompressing memory images in offline mode have been added.
- Support for saving and restoring information about the binding of UID identifiers to network sockets has been added.
- The option '--image-io-mode' has been added for reading and writing memory page images in O_DIRECT mode (bypassing the page cache).
Source: opennet.ru
