CRIU
CRIU (от англ. Checkpoint/Restore In Userspace) — программное обеспечение для операционной системы Linux, позволяющее создать извне во время выполнения произвольной программы контрольную точку с возможностью возобновления работы программы с этой точки, в том числе в другом экземпляре операционной системы (функция живой миграции)[2].
Главной особенностью проекта является его преимущественная реализация в пространстве пользовательских процессов, а не в ядре операционной системы (как, к примеру, в проекте OpenVZ), а также возможность работы с произвольными процессами без дополнительной поддержки с их стороны[3].
Общие сведения
| CRIU | |
|---|---|
| Тип | Инструментальное программное обеспечение |
| Разработчик | Команда OpenVZ |
| Написана на | Си и Ассемблер |
| Операционная система | Linux |
| Последняя версия | |
| Репозиторий | github.com/checkpoint-re… |
| Лицензия | GNU GPL v.2 |
| Сайт | criu.org |
История
В 2011 компания Parallels анонсировала[4] в российской прессе планы по интеграции своего проекта Parallels Virtuozzo Containers в основное ядро Linux. Одной из основных особенностей проекта является возможность живой миграции процессов. Осмысление предыдущих неудачных попыток интеграции подобных технологий в ядро операционной системы[5] привело разработчиков к осознанию того, что миграцию процессов необходимо реализовывать в адресном пространстве пользовательских приложений.
Начальная версия проекта CRIU была разработана Павлом Емельяновым, лидером команды разработчиков OpenVZ, и представлена сообществу разработчиков операционной системы Linux 15 июля 2011 года[6]. В сентябре того же года проект был представлен на конференции Linux Plumbers[7].
В целом проект был принят с оптимизмом, что подтверждается включением в ядро некоторых правок, необходимых проекту. Однако маинтейнер Эндрю Мортон, через чьё git-дерево правки попали в основное ядро, был в своих комментариях несколько скептичен[8].
Первый релиз проекта состоялся 23 июля 2012 года[9]. 25 ноября 2013 года разработчики анонсировали первый крупный релиз своего проекта — 1.0[10]. 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[11], в рамках которого реализован набор операций над TCP-сокетом, позволяющих «разобрать» и «собрать» его, не запуская никаких, описанных в стандарте, процедур по сетевому обмену пакетами.
Примечания
Литература
- Осваиваем систему заморозки процессов CRIU // Хакер. — 2013. — 5 ноября (№ 3). — С. 119.
Ссылки
- CRIU: больше, чем живая миграция для Linux контейнеров (Архивная копия)