Discussion:
Moving a running process from one computer to another
(too old to reply)
Albert Goodwill
2007-02-20 16:03:35 UTC
Permalink
Hi,

Is there a way to move a running process from one computer to another
and resume the execution from where the original process was
intrrupted?

int main(...)
{
for (int i=0; i<very large number; i++){
cout << i << "," << endl;
solve rocket science equations
if (i==3) // SomeCondition happened and we decided to move from
Computer-A to Computer-B
MoveTo("192.168.1.123"); //Move this process to another
computer and continue to run on that computer
}
return 0;

}

Computer-A
1,2,3,

Computer-B
4,5,6,7,8, ....
russell kym horsell
2007-02-22 00:13:29 UTC
Permalink
Post by Albert Goodwill
Hi,
Is there a way to move a running process from one computer to another
and resume the execution from where the original process was
intrrupted?
[...]

Of course the ans depends on the OS.

For UNIX/Linux-like offerings the short answer is "usually", but the
degress of difficulty can be high.

In principle it's not much more different/difficult than swapping out/in a
process. The details can be tedious, depending on primitives offered by
your brand of *NIX.

If the process-moving tool is running outside the kernel it must first "stun"
the target process (some NIX have a "trace" feature that does this -- it's
otherwise used to allow debuggers to attach to processed-to-be-debugged);
then track down all its resources be they open file handles, attached memory
segments, physical devices, fp registers, etc -- bundle them up and ship them
off to the dest, and then unpack them.

But now the fun part. On the destination machine the same resources may not
be available and/or those resources are bound to have different names.
So on the dest node you need to provide a wrapper to do some
renaming operations to allow the re-animated process to continue but not
notice memory segments (e.g.) are not now attached to the same addresses
they may have been on the source node.

Start simple and work up.
Edward Feustel
2007-02-22 13:20:22 UTC
Permalink
Post by Albert Goodwill
Hi,
Is there a way to move a running process from one computer to another
and resume the execution from where the original process was
intrrupted?
int main(...)
{
for (int i=0; i<very large number; i++){
cout << i << "," << endl;
solve rocket science equations
if (i==3) // SomeCondition happened and we decided to move from
Computer-A to Computer-B
MoveTo("192.168.1.123"); //Move this process to another
computer and continue to run on that computer
}
return 0;
}
Computer-A
1,2,3,
Computer-B
4,5,6,7,8, ....
This notion is called Mobility. You might really prefer to have a
meta-language that
would describe where and when processes could be run and under what
circumstances
you would move the process to another place. With a heterogeneous
environment in
terms of OS's, libraries, etc., mobility can be extremely complicated. You
might want
to think in terms of using Java and Jini in order to do it.
Ed
Robert Belleman
2007-02-22 16:03:42 UTC
Permalink
Post by Edward Feustel
Post by Albert Goodwill
Hi,
Is there a way to move a running process from one computer to another
and resume the execution from where the original process was
intrrupted?
int main(...)
{
for (int i=0; i<very large number; i++){
cout << i << "," << endl;
solve rocket science equations
if (i==3) // SomeCondition happened and we decided to move from
Computer-A to Computer-B
MoveTo("192.168.1.123"); //Move this process to another
computer and continue to run on that computer
}
return 0;
}
Computer-A
1,2,3,
Computer-B
4,5,6,7,8, ....
This notion is called Mobility. You might really prefer to have a
meta-language that
would describe where and when processes could be run and under what
circumstances
you would move the process to another place. With a heterogeneous
environment in
terms of OS's, libraries, etc., mobility can be extremely complicated. You
might want
to think in terms of using Java and Jini in order to do it.
Ed
Another term for it would be "migration" or also "checkpoint/
restart" as it checkpoints the state of a process, then
restarts the process (possibly on a different system) by
carefully settings back the state.

You may want to have a look at the work our group did on
Dynamite:
http://www.science.uva.nl/research/scs/Software/

Condor supports migration as well:
http://www.cs.wisc.edu/condor/

Best,
-- Rob
--
Robert Belleman, PhD, Informatics Inst., Faculty of Science
Universiteit van Amsterdam, Kruislaan 403, 1098 SJ Amsterdam
the Netherlands. Tel: +31 20 525 7510 - Fax: +31 20 525 7419
http://www.science.uva.nl/~robbel/ - ***@science.uva.nl
mmsganesh
2007-04-09 15:14:05 UTC
Permalink
You might want to have a look at http://openmosix.sourceforge.net/
where they try to dynamically move processes from one system to
another for load-balancing considerations. And it works based on Linux
kernel.

Loading...