Выпуск CRIU 4.0, системы для сохранения и восстановления состояния процессов в Linux

Опубликован выпуск инструментария CRIU 4.0 (Checkpoint and Restore In Userspace), предназначенного для сохранения и восстановления процессов в пространстве пользователя. Инструментарий позволяет сохранить состояние одного или группы процессов, а затем возобновить работу с сохранённой позиции, в том числе после перезагрузки системы или на другом сервере без разрыва уже установленных сетевых соединений. Код проекта написан на языке Си и распространяется под лицензией GPLv2. CRIU применяется в таких системах управления контейнерами, как OpenVZ, LXC/LXD и Docker. Необходимые для работы CRIU изменения включены в основной состав ядра Linux.

Из областей применения технологии CRIU отмечается обеспечение перезагрузки ОС без нарушения непрерывности выполнения длительно выполняемых процессов, Live-миграция изолированных контейнеров, ускорение запуска медленных процессов (можно начать работу с состояния, сохранённого после инициализации), проведение обновлений ядра без перезапуска сервисов, периодическое сохранение состояния долговыполняемых вычислительных задач для возобновления работы в случае краха, балансировка нагрузки на узлы в кластерах, дублирование процессов на другую машину (fork на удалённую систему), создание снапшотов пользовательских приложений в процессе работы для их анализа на другой системе или на случай если потребуется отменить дальнейшие действия в программе.

В новом выпуске:

  • Добавлен плагин CUDA, обеспечивающий возможность сохранения и восстановление состояния приложений на базе технологии NVIDIA CUDA.
  • Добавлена поддержка механизма Shadow Stack, поддерживаемого начиная с ядра Linux 6.6 и позволяющего блокировать работу многих эксплоитов, используя аппаратные возможности процессоров Intel (после передачи управления функции, адреса возврата сохраняются процессором не только в обычном стеке, но и в отдельном “теневом” стеке, который не может быть изменён напрямую, а перед выходом из функции адрес возврата извлекается из теневого стека и сверяется с адресом возврата из основного стека).
  • Добавлена поддержка ioctl-команды PAGEMAP_SCAN для получения информации о содержимом таблиц страниц памяти, что среди прочего при использовании с userfaultfd() позволяет определять факты записи в определённую область памяти.
  • Реализована возможность восстановления потока в корректной cgroup v1.
Release. Ссылка here.