После шести месяцев разработки опубликован выпуск инструментария CRIU 4.2 (Checkpoint and Restore In Userspace), предназначенного для сохранения и восстановления процессов в пространстве пользователя. Инструментарий позволяет сохранить состояние одного или группы процессов, а затем возобновить работу с сохранённой позиции, в том числе после перезагрузки системы или на другом сервере без разрыва уже установленных сетевых соединений. Код проекта написан на языке Си и распространяется под лицензией GPLv2. CRIU применяется в таких системах управления контейнерами, как OpenVZ, LXC/LXD и Docker. Необходимые для работы CRIU изменения включены в основной состав ядра Linux...Подробнее: https://www.opennet.me/opennews/art.shtml?num=64248
Использую в продуктивной системе, здоровья проекту!
продуктовой (с) тех-лид ВТБ
В проде (с) тех-лид Сбера
> продуктовой (с) тех-лид ВТБ
> В проде (с) тех-лид СбераПродолжу дальше:
В проде (с) тех лид Гугла
В проде (с) тех лид Мелкософта
В проде (с) тех лид НАСА
В проде (с) тех лид "Рога и копыта"
Попробовал. Хм...Джава-стек сумело корректно сохранить и восстановить
А чего там восстанавливать? Только с видеокартами были сложности. Лучше расскажи, какое практическое применение есть? Я могу придумать только продолжительный рендер без возможности прервать и срочное обновление.
На старых версия не всегда корректно работал с большим количеством JNI-вызовов, ведь должны захватываться и они.
> Лучше расскажи, какое практическое применение есть?Рендер, расчеты.
На билдферме может выполняться сборочный процесс.
Иногда просто нежелательно тушить процесс
Сборка Раста.
ты же тот самый техлид выше? и не знаешь применения для этой технологии?! ну тогда я рассказывать точно небуду)
> Я могу придумать только продолжительный рендер без возможности прервать и срочное обновление.Перенос процесса на другую машину, потому что эта барахлит.
> Какое практическое применение есть?Чтоб можно было реализовать восстановление игр без повторного запуска, как на консолях
А смысл? У кого-то уже получилось?
>без разрыва уже установленных сетевых соединенийЭто невозможно. Другая сторона в сетевом соединении увидит разрыв. Если есть данные прикреплённые к сессии, то они сбросятся.
Другая сторона только отвалится по таймауту. Если не успеет, то всё будет как будто у нас тут небольшой свопинг приключился.
Там специальные подпорки в ядре, позволяющие реконструировать внутреннее состояние сокета без использования вызовов сокетного апи, поэтому сокет будет восстановлен точно в том же состоянии, и если удалённая сторона не затаймаутилась - то она ничего не заметит, закрытия сокета и посылки FIN не происходит, а после разморозки трафик едет дальше, как ни в чём не бывало.
> после разморозки трафик едет дальше, как ни в чём не бывало.даже через неделю?
Через неделю-то тайаут произойдёт. Но если только та сторона тоже решила заморозиться, то и через месяц.
Хоть через год, если настроишь тайм-ауты на обеих сторонах. Компьютеру без разницы.
> Это невозможно. Другая сторона в сетевом соединении увидит разрыв.Да ладно? Что действительно невозможно скрыть факт перезагрузки? /s
До тех пор, пока ты (или что-то там ниже по сетевому стеку) не отправил другой стороне сообщения о том, что ты разрываешь соединение, другая сторона ничего не заподозрит. Единственное, что может выдать Штирлица -- это таймаут: если ты долго не будешь отправлять ACK пакеты в ответ на принятые оттуда, то сетевой стек на той стороне решит, что соединение оборвалось.
Единственное что в этом мне интересно, как они перезагружают, не теряя пакетов. Полагаются на способности сетевой карты буферизировать, и быстро-быстро подменяют ядро и инициализируют новое, пока буферы не переполнились?
Впрочем, несколько потерянных пакетов, наверное, не так важно, соединение потупит немного, но со временем вернётся в норму.
> перезагружают, не теряя пакетовТакой цели вообще нет и быть не может. В обычной сети пакеты теряются постоянно. Вокруг этого неприятного факта целый TCP с алгоритмами контроля окна передачи построили.
Не может быть чтобы такой цели не могло быть. TCP далеко не безболезненно переживает потерю пакетов, сначала дожидаясь таймаута, а потом сужая окно в Европу. Другое дело, что для того, чтобы оно работало, нет необходимости достигать этой цели на 100%.
TCP расстроится куда больше, если сервер перезагрузят и соединение молча отвалится навсегда, потеряв по дороге FIN. Когда это не проблема, никто не возится с CRIU, а просто выключают в одном месте и включают в другом.
> Устранено целочисленное переполнение в функции pagemap_len()А вот это типично сишная проблема. Многие тупо не парятся и везде пишут int, когда даже стандартом не определено, сколько точно байтофф оно занимает, ибо architecture dependent. Про знаковые/беззнаковые вообще молчу. А использовать всякие uint32_t не хотим, это ненужное ненужно.
Даже в расте такой номер не пройдет, если только специально не поиздеваться.
Понравилась цитата защищавшего расто-операторов, суну сюда: "Это вы себе что-то придумывете. А люди обучаются, исправляют ошибки, получают знания и удовольствие."
> А вот это типично сишная проблема.Бред сивой кобылы. Такое возможно в любом ЯП, где целые занимают фиксированный размер в памяти. Ржа тоже вполне себе подвержена ошибкам из-за выхода за допустимый диапазон значений.
Забавно, ржавозависимые при каждом баге в растокоде упрекают всех, что от их драгоценной ржи требуют чего-то, чего ржа не обещала, но сами не могут определиться с тем, чего же она все-таки обещала ;)
Ржавчина использует для подобных вещей везде isize/usize, и не позволяет неявных конверсий между ним и intВ то время как в сишке для совместимости везде int и грабли
И теперь usize::MAX + 1 не приведет к переполнению, да-да-да. Вот откуда вы лезете?
> И теперь usize::MAX + 1 не приведет к переполнению, да-да-да. Вот откуда
> вы лезете?Если что-то может переполниться, в Rust можно явно это обрабатывать через checked_add/saturating_add/strict_add/wrapping_add/overflowing_add, а не делать проверки вида a + b < a и надеяться что компилятор тут поймёт что это проверка на переполнение, а не UB (Потому что по стандарту это UB)
> Если что-то может переполниться, в Rust можно явно это обрабатывать через checked_add/saturating_add/strict_add/wrapping_add/overflowing_add,Ыыыы :) А такое-же в Си сделать по твоему - технически не возможно, да? ;)))))))
Дело не в том, возможно или нет. Все Тьюринг-полные языки эквивалентны. Проблема в том, что в коде на Си так не делают: никто не заставляет, традиций проверять и помнить всё UB назубок нет, тулинга и автоматизации толком тоже нет. А так, можешь писать без лажи на Си — пиши. Хоть сразу у машинных кодах пиши, если можешь. Но ведь по факту, пишете вы только комментарии на опеннете.
> И теперь usize::MAX + 1 не приведет к переполнению, да-да-даШтука в том, что в расте тоже можно много чего натворить, но только если ты этого очень сильно захочешь. А в сишке ты можешь натворить, даже если очень не хочешь.
> стандартом не определено, сколько точно байтофф оно занимает, ибо architecture dependentВ рже, внезапно, размер usize и isize тоже зависит от архитектуры. Сюрприз!
Так это и документировано. На 32 битах - 32 бита, на 64 - 64. И никаких сюрпризофф.
А в сишке внезапно в одной и той же архитектуре может в разных ABI отличаться (например, размер лонга на линуксе 64 бита, на винде 32).
Это пока майкрософт и прочие не написали свой компилятор раста для 128 битных процессоров. Ну хотя у раста нет ABI, думать об этом и не придётся.
эту штуку могли бы использовать в proxmox для живой миграции контейнеров lxc
Когда сделают live миграцию LXC контейнеров в Proxmox VE как это было ранее когда были OpenVZ контейнеры?
Просто criu писали виртуоззники, у них под миграцию контейнеров между хостами все было заточено, так как виртуозза для хостеров и их shamand автоматом мигрировал контейнеры с проблемных хостов. В комплекте с виртуоззо сторадж это была довольно удобная вещь. Проксмокс скорее про небольшие внедрения, и фича эта была в нем просто из комплекта от openvz, чего видимо в lxc не доделали, потому что похоже коммерческого интереса хостить на lxc клиентов особо нет. Виртуозза к сожалению помирает, 7 версия была ох как давно, а 9я нововыпущенная - это совсем другой продукт, и даже без контейнеров вовсе. Но с другой стороны щас всем куб подавай.
Открытые документы pdf и chrome восстановит в прежнем виде после перезагрузки?