Теперь после перезапуска mosix ваша машина уже будет работать в кластере,
что можно увидеть запустив монитор командой mon. В случае, если вы увидите
в мониторе только свою машину или вообще не увидите никого, то, как говорится
- надо рыть. Скорее всего у вас ошибка именно в /etc/mosix.map.
Ну вот, увидили, но не победили. Что дальше? А дальше
очень просто :-) - нужно собрать утилиты для работы с измененным
/proc из пакета mproc. В частности в этом пакете идет неплохая модификация
top - mtop, в который добавили возможность отображения узла(node),
сортировки по узлам, переноса процесса с текущего узла на другой и установления
минимальной загрузки процессора узла, после которой процессы начинают мигрировать
на другие MOSIX - узлы.
Запускаем mtop, выбираем понравившийся не спящий
процесс (рекомендую запустить bzip) и смело давим клавишу "g" на вашей
клавиатуре, после чего вводим на запрос PID выбранного в качестве жертвы
процесса и затем - номер узла, куда мы хотим его отправить. А уже после
этого внимательно посмотрите на результаты, отображаемые командой mon -
та машина должна начать брать на себя нагрузку выбранного процесса.
А собственно mtop - в поле #N отображать номер узла,
где он выполняется.
Но это еще не все - ведь вам правда не хочется отправлять на другие
узлы процессы вручную? Мне не захотелось. У MOSIX есть неплохая встроенная
балансировка внутри кластера, которая позволяет более-менее равномерно
распределять нагрузку на все узлы. Ну а вот здесь нам придется потрудится.
Для начала я расскажу, как сделать тонкую настройку (tune) для двух узлов
кластера? в процессе которой MOSIX получает информацию о скоростях процессоров
и сети:
Запомните раз и навсегда - tune можно выполнять
только в single-mode. Иначе вы либо получите не совсем корректный результат,
либо ваша машина может просто зависнуть.
Итак, выполняем tune. После перевода операционной системы в single
- mode например командой init 1 или init S запускаем скрипт prep_tune,
который поднимет cетевые
интерфейсы и запустит MOSIX. После этого на одной из машин запускаем
tune, вводим ему номер другого узла для настройки и ждем результата - утилита
должна выдать запрос на ввод шести чисел, полученных от выполнения команды
tune -a <узел> на другом узле. Собственно операцию придется повторить
на другом узле командой tune -a <узел>, а результат из шести чисел ввести
на первый узел. После подобного тюнинга в вашей системе должен появится
файл /etc/overheads, содержащий информацию для MOSIX в виде неких числовых
данных. В случае, если по каким-то причинам tune не смог сделать его, просто
скопируйте из текущего каталога файл mosix.cost в /etc/overheads. Это поможет
;-).
При тюнинге кластера из более чем двух машин нужно
использовать утилиту, которая также поставляется с MOSIX - tune_kernel.
Данная утилита позволяет
вам в более простом и привычном виде настроить кластер, ответив на
несколько вопросов и проведя тюнинг с двумя машинами кластера.
Кстати, по собственному опыту могу сказать, что
при настройке кластера я рекомендую вам не загружать сеть, а наоборот -
приостановить все активные операции в локальной сети.
mosctl - контроль над узлом. Позволяет изменять параметры
узла - такие, как block, stay, lstay, delay и т.д
Давайте рассмотрим несколько параметров этой утилиты:
stay - позволяет останавливать миграцию процессов на
другие узлы с текущей машины. Отменяется параметром nostay или -stay
lstay - запрещает только локальным процессам миграцию,
а процессы с других машин могут продолжать это делать. Отменяется параметром
nolstay или -lstay.
block - запрещает удаленным/гостевым процессам выполнятся
на этом узле. Отменяется параметром noblock или -block.
bring - возвращает обратно все процессы с текущего узла
выполняемые на других машинах кластера. Этот параметр может не срабатывать,
пока мигрировавший процесс не получит прерывание от системы.
setdelay устанавливает время, после которого процесс
начинает мигрировать.
Ведь согласитесь - в случае, если время выполнения процесса меньше
секунды смысл переносить его на другие машины сети исчезает. Именно это
время и выставляется утилитой mosctl с параметром setdecay. Пример:
mosctl setdecay 1 500 200
устанавливает время перехода на другие узлы 500 миллисекунд в случае,
если процесс запущен как slow и 200 милисекунд для fast процессов. Обратите
внимание, что параметр slow всегда должен быть больше или равен параметру
fast.
mosrun - запускает приложение в кластере. например mosrun
-e -j5 make запустит make на 5-ом узле кластера, при этом все его дочерние
процессы будут также выполнятся на 5-ом узле. Правда здесь есть один нюанс,
при чем довольно существенный:
в случае, если дочерние процессы выполняются быстрее чем установленная
утилитой mosctl задержка (delay) то процесс не будет мигрировать на другие
узлы кластера. у mosrun еще довольно много различных интересных параметров,
но подробно узнать
о них вы сможете из руководства по этой утилите. (man mosrun)
mon - как мы уже знаем, это монитор кластера, который в псевдографическом виде отображает загрузку каждого рабочего узла вашего кластера, количество свободной и занятой памяти узлов и выдает много другой, не менее интересной информации.
mtop - модифицированная для использования на узлах кластера версия команды top. Отображает на экране динамическую информацию о процессах, запущенных на данном узле, и узлах, куда мигрировали ваши процессы.
mps - тоже модифицированная версия команды ps. Добавлено еще одно поле - номер узла, на который мигрировал процесс.
Вот на мой взгляд и все основные утилиты. На самом деле конешно можно
обойтись даже без них. Например используя для контроля над кластером /proc/mosix.
Там кроме того, что можно найти основную информацию о настройках узла,
процессах запущенных с других узлов и т.д.,а также поменять часть параметров.