Smith [#SmithASOPM##1#] and Jul [#JulOMIAD##1#] identify a number of primary reasons as to why migration is desirable in a distributed system:
Communication performance
Objects which communicate heavily can be colocated during the period in which they interact, in order to minimise communication costs. Since `remote communication can be three orders of magnitudes as costly as local communication' [#JulOMIAD##1#] colocation can be extremely significant in ensuring acceptable performance.
Load balancing
Moving processes may serve as a tool for balancing the load in a distributed system. It is necessary to trade off the possibly increased communication costs added to the cost of migration, against the increase in parallelism. If suitable algorithms are used, it has been demonstrated empirically that a large gain in performance can be achieved.
Long running processes may need to migrate in order to provide fault tolerance in the face of a certain class of faults about which advance notice can be given.
Data reduction
Whenever the process performs data reduction on some volume of data larger than its size, it may be advantageous to move the process to the data. Such operations may include the creation of summaries of large distributed databases (<#2537#> e.g.<#2537#> telemetry databases). This follows directly from the facts that large amounts of data are expensive to move and that heavily communicating processes operate most efficiently when colocated.
The resource desired is not remotely accessible. This is particularly true of special purpose hardware devices, for example, array processors, or situations in which guaranteed real-time response is critical.
Weakness in facilities
Existing facilities may not provide sufficient power. For example, in cases where the semantics for remote access of a resource are different from those for local access, it may be expedient to migrate objects in order to achieve the desired effect.
User mobility
If users move from one machine to another it may be useful to them if they are able to migrate objects to their current location without disruption.
Efficient garbage collection
It may be possible to improve the efficiency of garbage collection if objects can be migrated to machines which contain references.