Технология MOSIX :: Миграция процессов

MOSIX поддерживает полностью прозрачный процесс PPM. После миграции, процесс продолжает взаимодействовать со своей средой выполнения независимо от его положения на узлах кластера. Реализуя РРМ, мигрирующий процесс разделяется на два контекста: контекст пользователя - который мигрирует и контекст системы, зависящий от UHN и не способный к миграции.

Контекст пользователя, называемый также удалённый (remote), содержит программный код, стек, данные, карты памяти и регистры процесса. Удалённый контекст инкапсулирует процесс когда он запускается на уровне пользователя. Системный контекст, называемый также заместитель (deputy), содержит описания ресурсов, которые процесс присоединяет к себе и стек ядра для запуска системного кода от имени процесса. Представитель инкапсулирует процесс когда он запускается на уровне ядра. Это сохраняет узло-зависящую часть системного контекста процесса, следовательно это должно остаться на UHN процесса. В то время как процесс мигрирует в течении времени между различными узлами, представитель никогда не мигрирует.

Интерфейс взаимодействия между контекстом пользователя и системным контекстом хорошо определен. Поэтому возможен перехват каждого взаимодействия между этими контекстами, что способствует взаимодействию через сеть. Связь реализуется посредством соединительного канала для взаимодействия. На рисунке 3 показано взаимодействие двух процессов которые разделены UNH. На рисунке левый процесс является нормальным процессом ОС Linux в то время как правый процесс разделен и его удалённая часть мигрировала на другой узел.


Взаимодействие процессов. Удаленный и представитель. [2911 байтов]

Рис. 3 Взаимодействие процессов. Удаленный и представитель.


Время миграции имеет фиксированный компонент, для порождения нового кадра процесса на новом (удалённом) узле, и линейный компонент, пропорциональный количеству страниц памяти для передачи. Для минимизации издержек на миграцию передаются только страница таблиц и "запорченные" страницы процесса.

При выполнении процесса в MOSIX, независимость местоположения выполняемого процесса достигается перераспределением по узлам, зависящим от системных вызовов к заместителю на UHN. Системный вызов синхронизируется взаимодействием между двумя контекстами процессов. Все системные вызовы, запущенные процессом, перехватываются на уровне связи (link layer) удаленного узла. Если системный вызов не зависит от узла, то он выполняется локально на удалённом (на удалённом узле). В противном случае, системный вызов транслируется заместитель, который запускает системный вызов от имени процесса в UHN. Заместитель возвращает результат обратно на удалённый узел, который затем продолжает выполнение пользовательского кода.

Иными формами взаимодействия между двумя контекстами процесса являются выдача сигналов (signal delivery) и процессы-сторожа (process wakeup events), например, срабатывающие на прибытие каких-либо данных по сети. Эти события требуют, чтобы заместитель асинхронно размещался и взаимодействовал с удаленным. Такое размещение требует встречного коммуникационного канала между ними. Обычно ядро на UHN информирует заместителя о событии. Заместитель проверяет необходимо ли с его стороны какие-либо действия или нет, если это так и необходимо отреагировать, то заместитель в свою очередь информирует удаленного. Удаленный контролирует канал взаимодействия для сообщений об асинхронных событиях, например, сигналов, только после возобновления выполнения на пользовательском уровне. Этот основной принцип заложен в технологию MOSIX, при этом модификация ядра отсутствует, поэтому возможно беспрепятственное перенесение данной технологии на другие архитектуры.

Одним из недостатков принципа заместителя заключается в дополнительных накладных расходах при запуске системных вызовов. Дополнительные затраты следуют из файловых и сетевых операциях доступа. Например, все сетевые связи (сокеты) создаются на UHN, таким образом, налагая накладные расходы связанные с соединением, если процесс мигрирует прочь с UHN. Для компенсации данной проблемы разработана технология "мигрирующих сокетов", которая переносит процесс и позволяет осуществить прямую связь между мигрировавшими процессами. В настоящее время такие издержки могут быть значительно уменьшены при начальном распределении коммуникационных процессов на различные узлы, например, используя PVM/MPI. Если система становится неустойчивой, то алгоритмы MOSIX переназначают процессы для улучшения производительности.