CRIU

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
CRIU
Тип

Инструментальное программное обеспечение

Разработчик

Команда OpenVZ

Написана на

Си и Ассемблер

Операционная система

Linux

Лицензия

GNU GPL v.2

Сайт

criu.org

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

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

История[править | править вики-текст]

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

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

В целом, проект был принят с оптимизмом, что подтверждается включением в ядро некоторых правок, необходимых проекту. Однако следует отметить, что Линус Торвальдс, создатель ядра Linux, отреагировал на проект скептически[5]. В частности, он отметил:

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

Первый релиз проекта состоялся 23 июля 2012 года[6].

Первый крупный релиз[править | править вики-текст]

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

Возможности[править | править вики-текст]

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

На сегодняшний день поддерживается две архитектуры — X86 64 и ARM — и следующие объекты ОС Linux.

  • Процессы,
    • иерархия
    • PID
    • идентификаторы пользователя и группы (uid, euid, sid, …)
    • системные права
    • потоки
    • состояния
  • Память приложений
  • Открытые файлы
  • Pipes, включая FIFO
  • Сокеты Unix
  • Сокеты TCP/IP (в том числе и в состоянии ESTABLISHED, см. ниже)
  • Сокеты UDP
  • System V IPC
  • Таймеры
  • Сигналы
  • Терминалы
  • Специфичные для Linux файловые дескрипторы
    • signalfd
    • inotify
    • eventfd
    • eventpoll

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

Миграция TCP соединений[править | править вики-текст]

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

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

См. также[править | править вики-текст]

Существуют аналогичные проекты в разной стадии завершенности:

  • Компонента CPT проекта OpenVZ (команда vzmigrate)
  • DMTCP
  • BLCR — Berkeley Lab Checkpoint/Restart

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]