Interested Article - CRIU
- 2021-08-29
- 1
CRIU (от англ. Checkpoint/Restore In Userspace ) — программное обеспечение для операционной системы Linux , позволяющее создать извне во время выполнения произвольной программы контрольную точку с возможностью возобновления работы программы с этой точки, в том числе в другом экземпляре операционной системы (функция живой миграции ) .
Главной особенностью проекта является его преимущественная реализация в пространстве пользовательских процессов , а не в ядре операционной системы (как, к примеру, в проекте OpenVZ ), а также возможность работы с произвольными процессами без дополнительной поддержки с их стороны .
История
В 2011 компания Parallels анонсировала в российской прессе планы по интеграции своего проекта Parallels Virtuozzo Containers в основное ядро Linux . Одной из основных особенностей проекта является возможность живой миграции процессов. Осмысление предыдущих неудачных попыток интеграции подобных технологий в ядро операционной системы привело разработчиков к осознанию того, что миграцию процессов необходимо реализовывать в адресном пространстве пользовательских приложений.
Начальная версия проекта CRIU была разработана Павлом Емельяновым, лидером команды разработчиков OpenVZ , и представлена сообществу разработчиков операционной системы Linux 15 июля 2011 года . В сентябре того же года проект был представлен на конференции .
В целом проект был принят с оптимизмом, что подтверждается включением в ядро некоторых правок, необходимых проекту. Однако маинтейнер Эндрю Мортон, через чье git-дерево правки попали в основное ядро, был в своих комментариях несколько скептичен .
Первый релиз проекта состоялся 23 июля 2012 года . 25 ноября 2013 года разработчики анонсировали первый крупный релиз своего проекта — 1.0 . CRIU этой версии может работать на архитектурах ARM и x86-64 , и не требует дополнительных модификаций ядра — достаточно поставить основное ядро версии не ниже 3.11.
Возможности
Поскольку проект разрабатывается в рамках проекта OpenVZ , основной целью, преследуемой разработчиками, является поддержка миграции контейнеров . Тем не менее, с помощью CRIU есть возможность сохранять и восстанавливать состояние отдельных процессов или их групп.
По состоянию на середину 2010-х годов поддерживается две архитектуры — x86-64 и ARM — и следующие объекты Linux:
- процессы , в том числе их иерархия, PID, идентификаторы пользователя и группы (uid, euid, sid, …), системные права, потоки, состояния;
- память приложений, в том числе отображённые файлы , разделяемые участки ;
- открытые файлы;
- конвейеры , включая FIFO,
- сокеты : сокеты домена , TCP -сокеты (в том числе и в состоянии ESTABLISHED ), UDP -сокеты;
- System V IPC
- Таймеры
- Сигналы
- Терминалы
- Специфичные для Linux файловые дескрипторы: signalfd , inotify , eventfd , eventpoll .
Вся требуемая поддержка ядра включена в ядро Linux версии 3.11.
Миграция TCP-соединений
Одной из поставленных целей проекта является возможность сохранять и восстанавливать состояние TCP-соединения, причём основной интерес представляет случай, когда процедуре сохранения с последующим восстановлением подвергается только одна сторона соединения. Такая постановка задачи возникла из основного сценария использования CRIU компанией Parallels, при котором контейнер мигрирует с одной машины на другую, и при этом все внешние соединения «переезжают» вместе с контейнером.
Для достижения поставленной цели был разработан и внедрен в ядро Linux версии 3.5 механизм, получивший название TCP repair mode , в рамках которого реализован набор операций над TCP-сокетом, позволяющих «разобрать» и «собрать» его, не запуская никаких, описанных в стандарте, процедур по сетевому обмену пакетами.
Примечания
- — 2023.
- Павел Емельянов. // Журнал сетевых решений / LAN. — 2016. — № 3 . — С. 47 . 5 сентября 2017 года.
- Rami Rosen. Ch. 14. Advanced Topics // . — Apress, 2014. — С. 406. — 636 с. — ISBN 9781430261971 . 5 сентября 2017 года.
- 9 января 2014 года. // Cnews, 2011/08/12
- Jonathan Corbet, от 13 февраля 2012 на Wayback Machine // LWN.net
- Pavel Emelyanov, от 15 мая 2012 на Wayback Machine // LWN.net
- 14 ноября 2011 года. // Linux Plumbers Conference, September 7-9, 2011
-
Linus Torvalds, Git commit title:
(недоступная ссылка)
:
«Замечание: это проект, разрабатываемый разными сумасшедшими россиянами, по созданию контрольных точек и рестарта с них в основном из пользовательского приложения, с различным странным вспомогательным кодом, добавленным в ядро там, где показана такая необходимость.
… Однако, я не так, как разработчики, уверен в том, что всё это когда-нибудь заработает! Поэтому я прошу их „обернуть“ макросом CONFIG_CHECKPOINT_RESTORE каждый кусок нового кода в ядре.
Так что если со временем всё это закончится слезами и проект в целом развалится, это будет простой задачей пройтись по коду и выкинуть всё без следа.»Оригинальный текст (англ.)„A note on this: this is a project by various mad Russians to perform c/r mainly from userspace, with various oddball helper code added into the kernel where the need is demonstrated.
be a simple matter to go through and delete all trace of it.“
… However I'm less confident than the developers that it will all eventually work! So what I'm asking them to do is to wrap each piece of new code inside CONFIG_CHECKPOINT_RESTORE.
So if it all eventually comes to tears and the project as a whole fails, it should - от 14 ноября 2012 на Wayback Machine // LKML, 2012-07-23
- от 2 декабря 2013 на Wayback Machine // CRIU
- от 16 июня 2012 на Wayback Machine // LWN.net
Литература
- // Хакер . — 2013. — 5 ноября ( № 3 ). — С. 119 .
Ссылки
-
- — доклад на конференции YaC , 2012
- 2021-08-29
- 1