Математическое моделирование изменения рабочего набора процесса для интегральной живой миграции (1187402), страница 2
Текст из файла (страница 2)
Всилу архитектурных особенностей проект столкнулся с рядом проблемпрактического применения.То что реализация BLCR не была добавлена в основное ядро Линукссоздало большую проблему разработчикам, так как приложения не стоятна месте они могут требовать использования новых ядер с поддержкойнового функционала. И для применимости к этим программам необходимо постоянно портировать код BLCR под новый Linux.“By far the most challenging aspect of implementing BLCRwas to keep it working as the Linux kernel continued to evolve.”[2]Paul H Hargrove and Jason C DuellДанный проект может работать только с приложением в которымзаранее статически произведена привязка специальной библиотеки [3],которая может повлиять на работу программы.
Таким образом, можетбыть замедлена работа программы и созданы проблемы безопасности.Кроме того данный проект не поддерживает работу с открытыми сетевыми соединениями. Но поддержка сохранения и восстановления сетевых соединений является критичным моментом для реализации живоймиграции.Итак основные минусы этого решения, по сравнению с подходом CRIU:1. Добавить в ядро код проекта не получилось, потому-что он былслишком большим и сложным;2. Необходимо связывание приложения с специальной библиотекойBLCR;3. Библиотека потенциально может навредить программе;4. Решение проблемы сохранения и восстановления сетевых соединений не предлагается.7DMTCP(Distributed MultiThreaded CheckPointing)DMTCP разрабатывался в Северо-Восточном Университете2СШАв 2004-2006 г.г. DMTCP основан на предыдущей работе MultiThreadedCheckPointing [5] и выпускается под лицензией LGPL.
Это инструментдля сохранения и восстановления состояния нескольких приложений реализован полностью в пространстве пользователя, тестировалась поддержка приложений на Open MPI, MatLab, Pythion, Perl.“Checkpointing is added to arbitrary applications by injectinga shared library at exectution time. This library: Launches acheckpoint management thread in every user process which coordinates checkpointing. Adds wrappers around a small number oflibc functions in order to record information about open socketsat their cration time.”[4]Jason Ansel, Kapil Arya and Gene CoopermanВ данном проекте используется динамически подключаемая библиотека, которая создает для каждого процесса управляющую нить, котораяпроизводит процесс сохранения приложения.
Такой подход потенциально может деструктивно повлиять на работу приложения и существеннозамедлить работу системы. Это является основным минусом этого решения по сравнению с CRIU в котором не производится потенциальнодеструктивного внедрения библиотеки в работающее приложение, и нетее замедляющего влияния на приложение.OpenVZ(Open Virtuozzo)OpenVZ это решение контейнерной виртуализации на уровне операционной системы под лицензией GPL разрабатываемое при поддержкекомпании Parallels с 2005 г. OpenVZ позволяет на одном физическом сервере размещать множество изолированных копий операционной системыс общим ядром.
Система обеспечивает высокопроизводительное использование физических ресурсов, и масштабируемость.2 NortheasternUniversity8Это решение включает в себя реализацию сохранения и восстановления контейнера и Живую миграцию контейнеров. Вся функциональность OpenVZ реализована как отдельное ядро операционной системына базе Linux. Так как функциональность полностью была реализована в ядре операционной системы, то ее поддержка была затруднена постоянным изменением ядра Линукс.
На данный момент поддерживаетсянесколько веток OpenVZ ядер основанных на 2.6.* ядрах Линукс. Учитывая темпы развития ядра было принято решение внести код OpenVZв ядро Линукс.Из-за объемности кода и печального опыта предыдущих попыток внесения функциональности в ядро, появилась идея проекта CRIU - сохранение и восстановление (в основном) в пространстве пользователя.Linux Checkpoint/Restart by Oren LaadanCheckpoint/Restart by Oren Laadan [6] это решение разрабатываемоеОреном Лааданом в Колумбийском университете с 2008 года. Данныйпроект был попыткой внесения функциональности сохранения и восстановления приложений в ядро Linux. В общем и целом было произведенопримерно 20 попыток послать патчи проекта в ядро Линукс.
После долгих попыток сообщество ядра так и не приняло проект из-за слишкомбольшого объема изменений которые нужно было внести в ядро, и вовремя появившийся проект CRIU перехватил инициативу.1.1.2. История CRIUВ 2011 году компанией Parallels были анонсированы планы внедрениясвоих систем контейнерной виртуализации в основное ядро Linux. Идеяпроекта была в том чтобы выделить необходимый минимум изменений,которые необходимо привнести в ядро, а всю остальную функциональность вынести в пространство пользователя.Стартовая версия проекта CRIU была разработана Павлом Емельяновым, лидером команды OpenVZ, и представлена Linux сообществу 15июля 2011 года.
Она была первым толчком для убеждения Linux сообщества в том что идея принесет конечный результат. Многие, в связи с неудачными попытками предшественников по привнесению данного9функционала в ядро, отнеслись к идее скептически в том числе и ЛинусТорвальдс.“...
this is a project by various mad Russians to perform c/rmainly from userspace, with various oddball helper code addedinto the kernel where the need is demonstrated. So rather thansome large central lump of code, what we have is little bitsand pieces popping up in various places which either exposesomething new or which permit something which is normallykernel-private to be modified. The overall project is an ongoingthing.
I’ve judged that the size and scope of the thing meansthat we’re more likely to be successful with it if we integratethe support into mainline piecemeal rather than allowing it all todevelop out-of-tree. However I’m less confident than the developersthat it will all eventually work! So what I’m asking them to do isto wrap each piece of new code inside CONFIG_CHECKPOINT_RESTORE. So if it all eventually comes to tears and the projectas a whole fails, it should be a simple matter to go through anddelete all trace of it.”[1]Linus Torvalds, Andrew Morton, LKMLНо, не смотря на это, начало было положенно и первые изменения были внесены в основное ядро Linux.
Далее были внесены изменения дляотслеживания грязных страниц, добавлен режим восстановления для сокетов. Командой CRIU вплоть до 3 июля 2013 года было внесено более150 патчей.В версии ядра 3.11 уже присутствует весь необходимый для работы CRIU функционал, за небольшим исключением незначительных дополнительных возможностей. И дальнейшее развитие направленно наувеличение стабильности - поиск ошибок и повышение эффективностипроцедур создания контрольных точек и восстановления из них.1.2. АрхитектураОсновная функциональность CRIU делится на две части [13]:1031.
dump - сохранение снимка состояния процесса ;2. restore - восстановление процесса из снимка этого состояния.Также есть дополнительная функциональность направленная на оптимизацию работы системы и на повышение удобства взаимодействия ссистемой. Есть инструмент pre-dump - не полное сохранение, а отдельно, только снимка памяти процесса. Сам по себе, такой снимок не хранит информацию достаточную для восстановления процесса, но можетбыть использован для восстановления при итеративной миграции.
Онпозволяет подготовить до начала полного сохранения снимка часть памяти к восстановлению, то-есть уменьшить время простоя на финальнойитерации. Так же в CRIU есть page-server - сервер для получения страниц памяти процесса, напрямую из процедуры сохранения состояния,это необходимо для передачи страниц памяти при миграции. Service дляудобства использования CRIU через RPC(Remoute Procedure Call).
Дедупликация - возможность очистки сохраненных снимков состояния дляуменьшения расхода памяти при создании итеративных снимков, основанных на предыдущих итерациях.1.2.1. Сохранение моментальных снимковПолное сохранение состояния дерева процессов требует сохранить:структуру самого дерева, память которую используют процессы, пространства имен; очереди, пайпы, файловые дескрипторы, таймеры и вседругие объекты ядра используемые программой.CRIU делает уклон в сторону реализации данной функциональности в пространстве пользователя.
По этому, чтобы добыть необходимыеданные используется API (Application Programing Interfaces) ядра Linuxи только при невозможности сохранения каких-то объектов обычнымисредствами, в этом аспекте расширяется функциональность ядра.Рассмотрим интерфейсы используемые для сохранения состояния процессов в CRIU:1. Файловая система Procfs;3 Дляпростоты изложения часто упоминается один процесс, но CRIU позволяет также работатьс группами процессов - то есть с некоторым под деревом дерева процессов системы112. Механизм контроля процессов ptrace;3.