Given that it has been decided that process migration is useful it is necessary
to decide on a policy for load distribution. This is a question of deciding
<#2764#> which<#2764#> process should be moved to <#2765#> where<#2765#> and <#2766#> when<#2766#>, in order to
achieve the maximum improvement in <#2767#> performance<#2767#>. Performance can be
measured in a number of different ways; either as average throughput, delay, or
response time of the overall system or for each individual process.
According to Eager <#2768#> et al<#2768#> [#EagerALSIH##1#] most load distributing
algorithms can be categorised as following one of two major approaches:
- Load sharing
- Load sharing algorithms simply attempt to conserve the
ability of the system to perform work by assuring that no node is idle while
processes wait for service. The most notable feature of load sharing is that
it is only when the computational capacity of a node is exceeded that processes
from that node are migrated away (typically to totally idle nodes).
Consequently, the algorithms are inherently local in that they
only attempt to improve the performance of a small number of processes.
- Load balancing
- Load balancing algorithms attempt to spread the
workload amongst all the nodes in a distributed system. Processes are chosen
from heavily loaded nodes and migrated to lightly loaded nodes, in order to try
and achieve an equilibrium over the whole system. Thus, there is an attempt to
improve performance globally, rather than for a relatively small number of
processes as with load sharing. Unfortunately, the corresponding complexity
both of implementation and of analysis are significantly increased. In
the absence of near to idle processors (i.e. where there is little
imbalance), there is little to be gained.