Релиз CRIU 4.0 — открытой системы для сохранения и восстановления состояния процессов в Linux

от автора

20 сентября 2024 года состоялся релиз открытой системы для сохранения и восстановления состояния процессов в Linux CRIU 4.0 (Checkpoint and Restore In Userspace). Инструментарий решения позволяет сохранить состояние одного или группы процессов, а затем возобновить работу с сохранённой позиции, в том числе после перезагрузки системы или на другом сервере без разрыва уже установленных сетевых соединений.

Исходный код проекта написан на языке C и опубликован на GitHub под лицензией GPLv2.

Проект CRIU применяется в таких системах управления контейнерами, как OpenVZ, LXC/LXD и Docker. Необходимые для работы компоненты CRIU включены в основной состав ядра Linux.

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

Основные изменения и дополнения в CRIU 4.0:

• добавлен плагин CUDA, обеспечивающий возможность сохранения и восстановление состояния приложений на базе технологии Nvidia CUDA;

• добавлена поддержка механизма Shadow Stack, поддерживаемого начиная с ядра Linux 6.6 и позволяющего блокировать работу многих эксплоитов, используя аппаратные возможности процессоров Intel (после передачи управления функции, адреса возврата сохраняются процессором не только в обычном стеке, но и в отдельном теневом стеке, который не может быть изменён напрямую, а перед выходом из функции адрес возврата извлекается из теневого стека и сверяется с адресом возврата из основного стека);

• добавлена поддержка ioctl-команды PAGEMAP_SCAN для получения информации о содержимом таблиц страниц памяти, что среди прочего при использовании с userfaultfd() позволяет определять факты записи в определённую область памяти;

• реализована возможность восстановления потока в корректной cgroup v1.


ссылка на оригинал статьи https://habr.com/ru/articles/845438/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *