Release Of CRIU 4.3, System For Saving And Restoring State Of Processes In Linux

After 11 months of development, published the release of the CRIU 4.3 (Checkpoint and Restore In Userspace) toolkit, designed to save and restore processes in user space. The toolkit allows you to save the state of one or a group of processes, and then resume work from the saved position, including after a system reboot or on another server, without breaking already established network connections. The project code is written in C and distributed under the GPLv2 license. CRIU is used in container management systems such as OpenVZ, LXC/LXD and Docker. The changes necessary for CRIU to work are included in the main structure of the Linux kernel.

Among the areas of application of CRIU technology are the provision of OS reboots without disrupting the continuity of execution of long-running processes, Live migration of isolated containers, acceleration of the launch of slow processes (you can start working from the state saved after initialization), carrying out kernel updates without restarting services, periodically saving the state of long-running computing tasks to resume work in case of an emergency, load balancing on nodes in clusters, duplicating processes on another machine (fork to a remote system), creating snapshots of user applications during operation for their analysis on another system or in case you need to cancel further actions in the program.

In new release:

  • Implemented the ability to compress memory blocks and pages using the LZ4 algorithm and multi-threaded decompression.
  • Improved performance by enabling asynchronous I/O (AIO) when restoring VMA (Virtual Memory Area) pages, a new method of stopping tasks without using hardware breakpoints and parallelizing the restoration of memfd and anonymous shared memory.
  • Added support for the ARM64 GCS (Guarded Control Stack) extension, which provides hardware protection of return addresses from functions. After control is transferred to a function, return addresses are stored by the processor not only in the regular stack, but also in a separate shadow stack, which cannot be changed directly. Before the function exits, the return address is popped from the shadow stack and checked against the return address from the main stack.
  • Added a backend to save the state of the NVIDIA CUDA driver API.
  • Restoration of GPU mapping is provided.
  • For the amdgpu driver, saving and restoring the state of DRM (Direct Rendering Manager) subsystem buffers and DMA-BUF file descriptors has been implemented.
  • Added commands for compressing and decompressing memory images in offline mode.
  • Added support for saving and restoring information about binding UID identifiers to network sockets.
  • Added option “–image-io-mode” for writing and reading memory page images in O_DIRECT mode (bypassing the page cache).
/Reports, release notes, official announcements.