[vwnc] Live Migration

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

[vwnc] Live Migration

Steffen Märcker
Hi there!

I wonder whether it is possible to migrate an running image from one  
virtual machine to another (similar to live migration in Xen and other  
virtualization systems). An image contains all state and data an  
application has. Instead of dumping it to a disk it should be possible to  
transfer it directly to another virtual machine (over a network  
connection) in order to seamlessly migrate between heterogeneous systems.
Has anybody worked on such a project or can point me to an already  
existing?

Thanks,
Steffen
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Live Migration

Joerg Beekmann, DeepCove Labs (YVR)
In the "simplest thing that could work that I can think of" category what about this; run an open-talk agent on the remote machine. When the local machine wants to migrate it saves itself to disk, sends the resulting file to the remote agent and terminates itself. The remote agent starts the image it just received.

Of course there are many nuances but I don't think the important ones will be in avoiding the creation of a file.

Joerg

> -----Original Message-----
> From: [hidden email] [mailto:[hidden email]] On Behalf
> Of Steffen Märcker
> Sent: Monday, July 28, 2008 10:10 AM
> To: [hidden email]
> Subject: [vwnc] Live Migration
>
> Hi there!
>
> I wonder whether it is possible to migrate an running image from one
> virtual machine to another (similar to live migration in Xen and other
> virtualization systems). An image contains all state and data an
> application has. Instead of dumping it to a disk it should be possible to
> transfer it directly to another virtual machine (over a network
> connection) in order to seamlessly migrate between heterogeneous systems.
> Has anybody worked on such a project or can point me to an already
> existing?
>
> Thanks,
> Steffen
> _______________________________________________
> vwnc mailing list
> [hidden email]
> http://lists.cs.uiuc.edu/mailman/listinfo/vwnc

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Live Migration

Steffen Märcker
For me the most important point is "seamlessly": Imagine an application
consuming lots of memory, e.g. 1GB. Saving it to disk, tranfering to the
remote machinge (perhaps 1GigaBit connection) and starting it again would
need more than 8 seconds.
What's needed is something like
1. start a remote image and keep it in sync
2. stop the running process and transfer the stack to the remote machine
3. quit the old image and resume execution in the new one
...not considering other issues like file handles and so.

Steffen




Am 28.07.2008, 23:51 Uhr, schrieb Joerg Beekmann <[hidden email]>:

> In the "simplest thing that could work that I can think of" category  
> what about this; run an open-talk agent on the remote machine. When the  
> local machine wants to migrate it saves itself to disk, sends the  
> resulting file to the remote agent and terminates itself. The remote  
> agent starts the image it just received.
>
> Of course there are many nuances but I don't think the important ones  
> will be in avoiding the creation of a file.
>
> Joerg
>
>> -----Original Message-----
>> From: [hidden email] [mailto:[hidden email]] On  
>> Behalf
>> Of Steffen Märcker
>> Sent: Monday, July 28, 2008 10:10 AM
>> To: [hidden email]
>> Subject: [vwnc] Live Migration
>>
>> Hi there!
>>
>> I wonder whether it is possible to migrate an running image from one
>> virtual machine to another (similar to live migration in Xen and other
>> virtualization systems). An image contains all state and data an
>> application has. Instead of dumping it to a disk it should be possible  
>> to
>> transfer it directly to another virtual machine (over a network
>> connection) in order to seamlessly migrate between heterogeneous  
>> systems.
>> Has anybody worked on such a project or can point me to an already
>> existing?
>>
>> Thanks,
>> Steffen
>> _______________________________________________
>> vwnc mailing list
>> [hidden email]
>> http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Live Migration

Steffen Märcker
In reply to this post by Steffen Märcker
Basically I am thinking of the way Xen and VMWare implement live  
migration. I think virtual machines (at the level of smalltalk an java vm)  
could extend migration to heterogeneous System like x86 Windows and power  
pc linux. The question is, how can this be achieved in Smalltalk?

Steffen





> Hi Steffen!
>
> Steffen Märcker wrote:
>> For me the most important point is "seamlessly": Imagine an
>> application consuming lots of memory, e.g. 1GB. Saving it to disk,
>> tranfering to the remote machinge (perhaps 1GigaBit connection) and
>> starting it again would need more than 8 seconds.
>> What's needed is something like
>> 1. start a remote image and keep it in sync
>
> That sounds like hot-backup. I know of no system / software that
> does hot backup by replicating state of objects in memory.
> Usually both systems perform the same operation on the start
> objects.
>
> Keeping objects in sync across different machines sounds like
> database synchronization, where you have the advantage of
> fully described transactions and atomic state snapshots on
> commit.
>
>> 2. stop the running process and transfer the stack to the
>>    remote machine
>
> see above. Only transfering the stack would mean to sync the
> heap. Even if you want to avoid the one-shot transfer of the
> image you would still need a live connection transporting your
> gigabyte of heap to the other machine plus all the changes
> during the course of your processing (which would mean a
> severe extra network load plus the wait cycles to ensure that
> the target machine received a correct heap fragment). And
> ensuring a consistent state you would end up with some kind
> of transaction handling, which basically boils down to a
> database.
>
>> 3. quit the old image and resume execution in the new one
>> ...not considering other issues like file handles and so.
>
> Which brings all kind of detection problems, like
>   - is the source machine really up/down?
>   - is the target reachable and what means that dropped
>     ack package?
>   - is it save to assume that the source machine will not
>     suddenly be available/restarted again and start
>     working on the same "stack" as I would right now?
>
> For me the problem sounds like it is solved by databases.
>
> Just my two cents
>   Jan


_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Live Migration

Janko Mivšek
Steffen Märcker wrote:

> Basically I am thinking of the way Xen and VMWare implement live  
> migration. I think virtual machines (at the level of smalltalk an java vm)  
> could extend migration to heterogeneous System like x86 Windows and power  
> pc linux. The question is, how can this be achieved in Smalltalk?

One of possibilities would be to tie Smalltalk VM to VMware memory
management, so that VMware would actually do a migration, not Smalltalk
VM. What virtualization engine is usually doing is saving parts of
memory to disk in advance so that when you do a snapshot, just  a small
amount of memory still needs to be saved and this is quick.

Something like that needs therefore to be achieved with VM too. VM
standalone or with help of underlying virtualization engine, as I said.

JAnko


>
>
>
>
>> Hi Steffen!
>>
>> Steffen Märcker wrote:
>>> For me the most important point is "seamlessly": Imagine an
>>> application consuming lots of memory, e.g. 1GB. Saving it to disk,
>>> tranfering to the remote machinge (perhaps 1GigaBit connection) and
>>> starting it again would need more than 8 seconds.
>>> What's needed is something like
>>> 1. start a remote image and keep it in sync
>> That sounds like hot-backup. I know of no system / software that
>> does hot backup by replicating state of objects in memory.
>> Usually both systems perform the same operation on the start
>> objects.
>>
>> Keeping objects in sync across different machines sounds like
>> database synchronization, where you have the advantage of
>> fully described transactions and atomic state snapshots on
>> commit.
>>
>>> 2. stop the running process and transfer the stack to the
>>>    remote machine
>> see above. Only transfering the stack would mean to sync the
>> heap. Even if you want to avoid the one-shot transfer of the
>> image you would still need a live connection transporting your
>> gigabyte of heap to the other machine plus all the changes
>> during the course of your processing (which would mean a
>> severe extra network load plus the wait cycles to ensure that
>> the target machine received a correct heap fragment). And
>> ensuring a consistent state you would end up with some kind
>> of transaction handling, which basically boils down to a
>> database.
>>
>>> 3. quit the old image and resume execution in the new one
>>> ...not considering other issues like file handles and so.
>> Which brings all kind of detection problems, like
>>   - is the source machine really up/down?
>>   - is the target reachable and what means that dropped
>>     ack package?
>>   - is it save to assume that the source machine will not
>>     suddenly be available/restarted again and start
>>     working on the same "stack" as I would right now?
>>
>> For me the problem sounds like it is solved by databases.
>>
>> Just my two cents
>>   Jan


--
Janko Mivšek
AIDA/Web
Smalltalk Web Application Server
http://www.aidaweb.si
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Live Migration

Steffen Märcker
Yes, hypervisors like Xen perform an incremental migration which  
guarantees almost no unavailability of service. It would be great to  
implement something similar in VW. The main advante of this would be to  
cross architecture border - something hypervisors cannot do.
I've had a look into the system and noticed that the actual image writing  
ist done by a primitive. This seems to be atomic and can consume  
relatively much time. I wonder how to make the creation of a snapshot  
incremental so that there's only very little syncronisation necessary to  
complete a possible migration. Any ideas out there?
In the Java camp is an intersting framework, namely "Mobile Jikes RVM"  
enabling applications to transfer their execution stack to another virtual  
machine and resume computation:  
http://mars.ing.unimo.it/wiki/index.php/Mobile_JikesRVM

Steffen


Am 30.07.2008, 22:08 Uhr, schrieb Janko Mivšek <[hidden email]>:

> Steffen Märcker wrote:
>
>> Basically I am thinking of the way Xen and VMWare implement live  
>> migration. I think virtual machines (at the level of smalltalk an java  
>> vm)  could extend migration to heterogeneous System like x86 Windows  
>> and power  pc linux. The question is, how can this be achieved in  
>> Smalltalk?
>
> One of possibilities would be to tie Smalltalk VM to VMware memory  
> management, so that VMware would actually do a migration, not Smalltalk  
> VM. What virtualization engine is usually doing is saving parts of  
> memory to disk in advance so that when you do a snapshot, just  a small  
> amount of memory still needs to be saved and this is quick.
>
> Something like that needs therefore to be achieved with VM too. VM  
> standalone or with help of underlying virtualization engine, as I said.
>
> JAnko
>
>
>>
>>> Hi Steffen!
>>>
>>> Steffen Märcker wrote:
>>>> For me the most important point is "seamlessly": Imagine an
>>>> application consuming lots of memory, e.g. 1GB. Saving it to disk,
>>>> tranfering to the remote machinge (perhaps 1GigaBit connection) and
>>>> starting it again would need more than 8 seconds.
>>>> What's needed is something like
>>>> 1. start a remote image and keep it in sync
>>> That sounds like hot-backup. I know of no system / software that
>>> does hot backup by replicating state of objects in memory.
>>> Usually both systems perform the same operation on the start
>>> objects.
>>>
>>> Keeping objects in sync across different machines sounds like
>>> database synchronization, where you have the advantage of
>>> fully described transactions and atomic state snapshots on
>>> commit.
>>>
>>>> 2. stop the running process and transfer the stack to the
>>>>    remote machine
>>> see above. Only transfering the stack would mean to sync the
>>> heap. Even if you want to avoid the one-shot transfer of the
>>> image you would still need a live connection transporting your
>>> gigabyte of heap to the other machine plus all the changes
>>> during the course of your processing (which would mean a
>>> severe extra network load plus the wait cycles to ensure that
>>> the target machine received a correct heap fragment). And
>>> ensuring a consistent state you would end up with some kind
>>> of transaction handling, which basically boils down to a
>>> database.
>>>
>>>> 3. quit the old image and resume execution in the new one
>>>> ...not considering other issues like file handles and so.
>>> Which brings all kind of detection problems, like
>>>   - is the source machine really up/down?
>>>   - is the target reachable and what means that dropped
>>>     ack package?
>>>   - is it save to assume that the source machine will not
>>>     suddenly be available/restarted again and start
>>>     working on the same "stack" as I would right now?
>>>
>>> For me the problem sounds like it is solved by databases.
>>>
>>> Just my two cents
>>>   Jan
>
>

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Live Migration

Janko Mivšek
Steffen Märcker wrote:

> Yes, hypervisors like Xen perform an incremental migration which
> guarantees almost no unavailability of service. It would be great to
> implement something similar in VW. The main advante of this would be to
> cross architecture border - something hypervisors cannot do.
> I've had a look into the system and noticed that the actual image
> writing ist done by a primitive. This seems to be atomic and can consume
> relatively much time. I wonder how to make the creation of a snapshot
> incremental so that there's only very little syncronisation necessary to
> complete a possible migration. Any ideas out there?

What about Prevayler like logging of object changes to log file? You
made a snapshot, then start logging changed objects. In the meantime you
copy image to the new system. Now you stop original, copy log and replay
it on the migrated image. This will reduce downtime considerably.

About quick snapshot: you can copy a memory footprint to a memory
"mirror", which can be done almost instantly. Now you can slowly write
that memory mirror to disk while original image continues to work (with
above mentioned logging switched on). This technique is actually in use
on dabbledb for fast snapshotting Squeak images.

Best regards
Janko



> In the Java camp is an intersting framework, namely "Mobile Jikes RVM"
> enabling applications to transfer their execution stack to another
> virtual machine and resume computation:
> http://mars.ing.unimo.it/wiki/index.php/Mobile_JikesRVM
>
> Steffen
>
>
> Am 30.07.2008, 22:08 Uhr, schrieb Janko Mivšek <[hidden email]>:
>
>> Steffen Märcker wrote:
>>
>>> Basically I am thinking of the way Xen and VMWare implement live  
>>> migration. I think virtual machines (at the level of smalltalk an
>>> java vm)  could extend migration to heterogeneous System like x86
>>> Windows and power  pc linux. The question is, how can this be
>>> achieved in Smalltalk?
>>
>> One of possibilities would be to tie Smalltalk VM to VMware memory
>> management, so that VMware would actually do a migration, not
>> Smalltalk VM. What virtualization engine is usually doing is saving
>> parts of memory to disk in advance so that when you do a snapshot,
>> just  a small amount of memory still needs to be saved and this is quick.
>>
>> Something like that needs therefore to be achieved with VM too. VM
>> standalone or with help of underlying virtualization engine, as I said.
>>
>> JAnko
>>
>>
>>>
>>>> Hi Steffen!
>>>>
>>>> Steffen Märcker wrote:
>>>>> For me the most important point is "seamlessly": Imagine an
>>>>> application consuming lots of memory, e.g. 1GB. Saving it to disk,
>>>>> tranfering to the remote machinge (perhaps 1GigaBit connection) and
>>>>> starting it again would need more than 8 seconds.
>>>>> What's needed is something like
>>>>> 1. start a remote image and keep it in sync
>>>> That sounds like hot-backup. I know of no system / software that
>>>> does hot backup by replicating state of objects in memory.
>>>> Usually both systems perform the same operation on the start
>>>> objects.
>>>>
>>>> Keeping objects in sync across different machines sounds like
>>>> database synchronization, where you have the advantage of
>>>> fully described transactions and atomic state snapshots on
>>>> commit.
>>>>
>>>>> 2. stop the running process and transfer the stack to the
>>>>>    remote machine
>>>> see above. Only transfering the stack would mean to sync the
>>>> heap. Even if you want to avoid the one-shot transfer of the
>>>> image you would still need a live connection transporting your
>>>> gigabyte of heap to the other machine plus all the changes
>>>> during the course of your processing (which would mean a
>>>> severe extra network load plus the wait cycles to ensure that
>>>> the target machine received a correct heap fragment). And
>>>> ensuring a consistent state you would end up with some kind
>>>> of transaction handling, which basically boils down to a
>>>> database.
>>>>
>>>>> 3. quit the old image and resume execution in the new one
>>>>> ...not considering other issues like file handles and so.
>>>> Which brings all kind of detection problems, like
>>>>   - is the source machine really up/down?
>>>>   - is the target reachable and what means that dropped
>>>>     ack package?
>>>>   - is it save to assume that the source machine will not
>>>>     suddenly be available/restarted again and start
>>>>     working on the same "stack" as I would right now?
>>>>
>>>> For me the problem sounds like it is solved by databases.
>>>>
>>>> Just my two cents
>>>>   Jan
>>
>>
>
>

--
Janko Mivšek
AIDA/Web
Smalltalk Web Application Server
http://www.aidaweb.si
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Live Migration

Steffen Märcker
Dear Janko,

> What about Prevayler like logging of object changes to log file?

I've thought about this and like it but there's one big problem. What
about actions that shouldn't repeated, like database operations, network
activties and so on? I am quite sure that you cannot filter this in a
generic way.

> About quick snapshot: you can copy a memory footprint to a memory  
> "mirror", which can be done almost instantly.

Have you more information on this? It sounds like a good entry point. Is
the memory footprint one in the image format or a copy of the physical
system memory (inmigrateable)?

Ciao, Steffen
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc