В начале действий по переносу нагрузки информации все компьютеры прекращают свою работу, и каждый получает информацию о локальной нагрузке в текущий момент времени. Информация о локальной нагрузке включает:
- Количество нагрузки (Ld).
- Количество времени, потраченное процессором на обработку приложений SPEEDES (TAppS).
- Количество нагрузки, которая была обработана с момента последнего переноса(LdM).
Как только координатор получает информацию от всех компьютеров сети, он начинает анализировать общую информацию о нагрузке на компьютеры. Координатор вычисляет следующие характеристики:
- Дисперсию коэффициента загрузки компьютера (VarCLd);
- Общее количество нагрузки, ожидающей обслуживания (TotalWLd);
- Дисперсию нагрузки, ожидающей обслуживания(VarWLd).
Дисперсия коэффициенты загрузки компьютера может свидетельствовать о том, насколько они загружены. Действительно, если какие-либо компьютеры выполняют несколько приложений вместе с приложениями SPEEDES в то время, как другие простаивают, значение дисперсии может быть велико. Чем больше величина дисперсии использования компьютера, тем менее эффективно используются ресурсы процессоров.
Общее количество нагрузки, ожидающей обслуживания – это сумма всех невыполненных работ на каждом из компьютеров. Если их количество мало, то выигрыша от балансировки может и не быть, поскольку накладные расходы на перенос нагрузки могут превысить выигрыш от балансировки. Это особенно ярко выражено, если нагрузка невелика.
Дисперсия нагрузки, ожидающей обслуживания(VarWLd). Дисперсия нагрузки, ожидающей обслуживания вычисляется для каждого компьютера. Большое значение этого показателя свидетельствует об отсутствии равномерной нагрузки на компьютеры. Этот показатель используется в качестве вторичного критерия, если дисперсия общей нагрузки ниже порогового значения (T). Указанную метрику (VarWLd) используют в процедуре (назовём её Decide()), которая выполняется перед процедурой переноса (Migrate()). Метрика нужна для принятия решения о переносе нагрузки.
На первом шаге процедуры Decide() выполняют сравнение между общим количеством ожидающей обслуживания нагрузки(TotalWLd) и указанным пороговым значением(T). Если значение TotalWLd выше, то вычисляется коэффициент загруженности компьютера. Если дисперсия коэффициента загрузки выше соответствующего порога (VarCLd > TLd), то выполняется процедура (Migrate()). В противном случае Migrate() на этом шаге не выполняется. В конце выполнения процедуры Decide(), центральный координатор посылает сообщение всем компьютерам о том, что они могут продолжить обработку своих локальных нагрузок, если в процедуре Migrate() нет необходимости.
Если необходимость в процедуре Migrate() есть, центральный координатор посылает сообщение о том, что ожидается выполнение этой процедуры. Далее происходит определение посылающего и принимающего компьютеров(Csender и Сreceiver). Опираясь на показатель скорости обработки, (например, отношение количества нагрузки, обработанной на локальном компьютере к общему количеству обработанной нагрузки на всех процессорах со времени последнего переноса.) центральный координатор перераспределяет оставшуюся необработанную нагрузку. Например, если компьютер обрабатывал 10% общего количества нагрузки после последнего выполнения Migrate(), он возьмёт 10% процентов ещё необработанной нагрузки. Следовательно, те рабочие станции, которые обработали большее количество нагрузки, получат опять большее её количество. Если слишком большой нагрузки нет, и скорость работы компьютеров остаётся неизменной, все компьютеры закончат свою работу примерно в одно и то же время.
Центральный координатор отмечает отложенные действия компьютеров – посылка, получение или отсутствие действия. Получающий компьютер будет проинформирован о количестве нагрузки, которую ему передадут, и идентификаторы посылающих компьютеров.
И, наконец, центральный координатор выполняет подготовку к переносу объектов, если этот перенос необходим. Таким образом, процедуры второго уровня выполняются лишь при необходимости выполнения процедуры Migrate().