Перейти к содержанию

CRIU

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
CRIU
Скриншот программы CRIUCheckpoint and Restore in Userspace
Тип Инструментальное программное обеспечение
Разработчик Команда OpenVZ
Написана на Си и Ассемблер
Операционная система Linux
Последняя версия 3.17.1 (23 июля 2022)
Лицензия GNU GPL v.2
Сайт criu.org

CRIU (от англ. Checkpoint/Restore In Userspace) — программное обеспечение для операционной системы Linux, позволяющее создать извне во время выполнения произвольной программы контрольную точку с возможностью возобновления работы программы с этой точки, в том числе в другом экземпляре операционной системы (функция живой миграции)[1].

Главной особенностью проекта является его преимущественная реализация в пространстве пользовательских процессов, а не в ядре операционной системы (как, к примеру, в проекте OpenVZ), а также возможность работы с произвольными процессами без дополнительной поддержки с их стороны[2].

История

В 2011 компания Parallels анонсировала[3] в российской прессе планы по интеграции своего проекта Parallels Virtuozzo Containers в основное ядро Linux. Одной из основных особенностей проекта является возможность живой миграции процессов. Осмысление предыдущих неудачных попыток интеграции подобных технологий в ядро операционной системы[4] привело разработчиков к осознанию того, что миграцию процессов необходимо реализовывать в адресном пространстве пользовательских приложений.

Начальная версия проекта CRIU была разработана Павлом Емельяновым, лидером команды разработчиков OpenVZ, и представлена сообществу разработчиков операционной системы Linux 15 июля 2011 года[5]. В сентябре того же года проект был представлен на конференции Linux Plumbers[6].

В целом проект был принят с оптимизмом, что подтверждается включением в ядро некоторых правок, необходимых проекту. Однако маинтейнер Эндрю Мортон, через чье git-дерево правки попали в основное ядро, был в своих комментариях несколько скептичен[7].

Первый релиз проекта состоялся 23 июля 2012 года[8]. 25 ноября 2013 года разработчики анонсировали первый крупный релиз своего проекта — 1.0[9]. CRIU этой версии может работать на архитектурах ARM и x86-64, и не требует дополнительных модификаций ядра — достаточно поставить основное ядро версии не ниже 3.11.

Возможности

Поскольку проект разрабатывается в рамках проекта OpenVZ, основной целью, преследуемой разработчиками, является поддержка миграции контейнеров. Тем не менее, с помощью CRIU есть возможность сохранять и восстанавливать состояние отдельных процессов или их групп.

По состоянию на середину 2010-х годов поддерживается две архитектуры — x86-64 и ARM — и следующие объекты Linux:

Вся требуемая поддержка ядра включена в ядро Linux версии 3.11.

Миграция TCP-соединений

Одной из поставленных целей проекта является возможность сохранять и восстанавливать состояние TCP-соединения, причём основной интерес представляет случай, когда процедуре сохранения с последующим восстановлением подвергается только одна сторона соединения. Такая постановка задачи возникла из основного сценария использования CRIU компанией Parallels, при котором контейнер мигрирует с одной машины на другую, и при этом все внешние соединения «переезжают» вместе с контейнером.

Для достижения поставленной цели был разработан и внедрен в ядро Linux версии 3.5 механизм, получивший название TCP repair mode[10], в рамках которого реализован набор операций над TCP-сокетом, позволяющих «разобрать» и «собрать» его, не запуская никаких, описанных в стандарте, процедур по сетевому обмену пакетами.

Примечания

  1. Павел Емельянов. Виртуализация приложений новый этап // Журнал сетевых решений / LAN. — 2016. — № 3. — С. 47. Архивировано 5 сентября 2017 года.
  2. Rami Rosen. Ch. 14. Advanced Topics // Linux Kernel Networking: Implementation and Theory. — Apress, 2014. — С. 406. — 636 с. — ISBN 9781430261971. Архивная копия от 5 сентября 2017 на Wayback Machine
  3. «Parallels наняла известных разработчиков для проникновения в ядро Linux» Архивировано 9 января 2014 года. // Cnews, 2011/08/12
  4. Jonathan Corbet, Checkpoint/restart: it’s complicated Архивная копия от 13 февраля 2012 на Wayback Machine // LWN.net
  5. Pavel Emelyanov, Checkpoint/restore mostly in the userspace Архивная копия от 15 мая 2012 на Wayback Machine // LWN.net
  6. Checkpoint/restart in the userspace Архивировано 14 ноября 2011 года. // Linux Plumbers Conference, September 7-9, 2011
  7. Linus Torvalds, Git commit title: «Merge branch 'akpm' (aka „Andrew’s patch-bomb, take two“)» (недоступная ссылка):

    «Замечание: это проект, разрабатываемый разными сумасшедшими россиянами, по созданию контрольных точек и рестарта с них в основном из пользовательского приложения, с различным странным вспомогательным кодом, добавленным в ядро там, где показана такая необходимость.
    … Однако, я не так, как разработчики, уверен в том, что всё это когда-нибудь заработает! Поэтому я прошу их „обернуть“ макросом CONFIG_CHECKPOINT_RESTORE каждый кусок нового кода в ядре.
    Так что если со временем всё это закончится слезами и проект в целом развалится, это будет простой задачей пройтись по коду и выкинуть всё без следа.»

  8. Announce: Checkpoint-restore tool v0.1 Архивная копия от 14 ноября 2012 на Wayback Machine // LKML, 2012-07-23
  9. Checkpoint-restore tool v1.0 Архивная копия от 2 декабря 2013 на Wayback Machine // CRIU
  10. TCP connection repair Архивная копия от 16 июня 2012 на Wayback Machine // LWN.net

Литература

Ссылки