Публикуван е инструментариумът CRIU 4.0 (Checkpoint and Restore In Userspace), предназначен за запазване и възстановяване на процеси в пространство на потребителя. Инструментариумът позволява запазване на състоянието на един или група от процеси и след това възобновяване на работата от запазената позиция, включително след презареждане на системата или на друг сървър без прекъсване на вече установените мрежови връзки. Кодът на проекта е написан на C и се разпространява под лиценз 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.
Източник: opennet.ru
