CRIU (Checkpoint/Restore In Userspace)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:34, 24 декабря 2016.
CRIU
CRIU.svg.png
Checkpoint and Restore in Userspace
Разработчики: Команда OpenVZ
Постоянный выпуск: 1.8 / 7 декабря 2015
Написана на: Си и Ассемблер
Операционная система: Linux
Тип ПО: Инструментальное программное обеспечение
Лицензия: GNU GPL v.2
Веб-сайт http://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].

Первый релиз проекта состоялся 23 июля 2012 года[6]. 25 ноября 2013 года разработчики анонсировали первый крупный релиз своего проекта — 1.0[7]. 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[8], в рамках которого реализован набор операций над TCP-сокетом, позволяющих «разобрать» и «собрать» его не запуская никаких описанных в стандарте процедур по сетевому обмену пакетами.


Подобные проекты

Следующие проекты обеспечивают функциональность, аналогичную CRIU:

Примечания

Ссылки