Как стать автором
Обновить

Комментарии 12

Хитрые какие :)
Сначала свой покажите вариант.
В чем хитрость? CRIU — это opensource, если вы предложите хорошее решение, то мы обязательно напишем, что это придумано вами.

Сразу скажу, у нас варианта, который бы нас устраивал, нет. Вы можете посмотреть то что есть на git.criu.org/?p=crtools.git;a=blob;f=pstree.c;hb=HEAD, но оно не покрывает все возможных случаев. Есть решение, которое покрывает все варианты, но оно нас не устраивает по сложности алгоритмов и по количеству вспомогательных процессов, которые создаются во время работы.

Если тут никто не предложит хорошего решения, то я опишу своё отдельной статьей.
Ах вона что, извините тогда.
Я просто подумал что вы разрабатываете продукт и «споткнулись» на определенной проблеме, и таким образом хотите её решить.

А можете привести несколько примеров, в каких случаях проще «заморозить» несколько процессов и потом их развернуть на другой машине?
Миграция между нодами, для балансировки нагрузки или для проведения сервисных работ. Подобное решение есть в OpenVZ ядре для миграции Linux контейнеров. Оно широко используется хостинг компаниями.

Обычному юзеру, может быть интересен сценарий с обновлением ядра, без перезагрузки юзерспейса habrahabr.ru/post/160201/.

На сайте есть еще десяток сценариев, как можно использовать CRIU criu.org/Usage_scenarios
Не знал про «криу». Интересненько. (с этой тулины надо бы и начать в статье)
Я не спец по линуксам, работаю на них только.
Но правильно ли я понимаю что с этой утилитой можно дампнуть любой процесс? Вместе с его деревом? и в последствии востановить?
востановление возможно только в схожей системе? Какие ограничения?
Я о CRIU писал несколько отдельных статей
habrahabr.ru/post/148413/
habrahabr.ru/post/152903/
habrahabr.ru/post/177499/

Любой процесс задампить нельзя, потому что процесс может иметь внешние связи и некоторые из них нельзя разорвать и потом восстановить. Так же процессы ресторятся с теми же пидами, которые у них были до дампа. Если часть пидов в новой системе занята, то рестор отвалится с ошибкой. Эта проблема обходится использованием pid name-space-ов.

Если вы хотите гарантировано задампить и поресторить дерево процессов, используйте Linux Containers.
Я еще не уверен хочу ли я это. Сначало надо разобраться какие есть возмопжности…
Спасибо за ссылки, буду разбираться.
Идея навскидку: у каждого процесса есть время его порождения. В принципе, это позволит нам упростить перебор решений, так как более «старый» процесс может быть либо братом, либо отцом для более молодого.
Так же он может находиться ниже в параллельной ветке.
Да, не подумал.
НЛО прилетело и опубликовало эту надпись здесь
Так известны все потомки и родители. Проблема в другом. Мы не знаем историю, как это дерево было создано.

Дерево жило своей жизнью, процессы там рождались, умирали, кто-то в какой-то момент времени становился лидером сессии, кто-то child-reaper-ом. Потом пришли мы и сбросили текущее состояние на диск. На ресторе надо восстановить его. Для этого нужно понять кто кого должен породить. В некоторых случаях придется вставлять вспомогательные процессы. К примеру если есть процессы принадлежащие к определенной сессиии, а лидера этот сессии нет.

Посмотрите на предложенный пример. К нему есть картинка, входные данные и выходные данные.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории