From: Anthony Liguori <aliguori@linux.vnet.ibm.com>
To: "Daniel P. Berrange" <berrange@redhat.com>
Cc: "libvir-list@redhat.com" <libvir-list@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Subject: [Qemu-devel] Re: QEMU interfaces for image streaming and post-copy block migration
Date: Tue, 07 Sep 2010 10:16:28 -0500 [thread overview]
Message-ID: <4C86574C.8070405@linux.vnet.ibm.com> (raw)
In-Reply-To: <20100907150345.GA26506@redhat.com>
On 09/07/2010 10:03 AM, Daniel P. Berrange wrote:
> On Tue, Sep 07, 2010 at 08:41:44AM -0500, Anthony Liguori wrote:
>
>> Hi,
>>
>> We've got copy-on-read and image streaming working in QED and before
>> going much further, I wanted to bounce some interfaces off of the
>> libvirt folks to make sure our final interface makes sense.
>>
>> Here's the basic idea:
>>
> [snip]
>
>
>> A related topic is block migration. Today we support pre-copy migration
>> which means we transfer the block device and then do a live migration.
>> Another approach is to do a live migration, and on the source, run a
>> block server using image streaming on the destination to move the device.
>>
>> With QED, to implement this one would:
>>
>> 1) launch qemu-nbd on the source while the guest is running
>> 2) create a qed file on the destination with copy-on-read enabled and a
>> backing file using nbd: to point to the source qemu-nbd
>> 3) run qemu -incoming on the destination with the qed file
>> 4) execute the migration
>> 5) when migration completes, begin streaming on the destination to
>> complete the copy
>> 6) when the streaming is complete, shut down the qemu-nbd instance on
>> the source
>>
> IMHO, adding further network sockets is the one thing we absolutely
> don't want to do to migration. I don't much like the idea of launching
> extra daemons either.
>
One of the use cases I'm trying to accommodate is migration to free
resources. By launching a qemu-nbd daemon, we can kill the source qemu
process and free up all of the associated memory.
>> This is a bit involved and we could potentially automate some of this in
>> qemu by launching qemu-nbd and providing commands to do some of this.
>> Again though, I think the question is what type of interfaces would
>> libvirt prefer? Low level interfaces + recipes on how to do high level
>> things or higher level interfaces?
>>
> I think it should be done entirely within the main QEMU migration
> socket. I know this isn't possible with the current impl, since it
> is unidirectional, preventing the target sending the source requests
> for specific data blocks. If we made migration socket bi-directional
> I think we could do it all within qemu with no external helpers
> or extra sockets
>
> 1. Create empty qed file on the destination with copy on read
> enable backing file pointing to a special 'migrate:' protocol
>
Why not just point migration and nbd to a unix domain socket and then
multiplex the two protocols at a higher level?
> 2. Run qemu -incoming on the destination with with the qed file
> 3. execute the migration
> 4. when migration completes, target QEMU continues streaming blocks
> from the soruce qemu.
> 5. when streaming is complete, source qemu can shutdown.
>
>
> Both your original proposal and mine here seem to have a pretty
> bad failure scenario though. After the cut-over point where the
> VM cpus start running on the destination QEMU, AFAICT, any failure
> on the source before block streaming complete leaves you dead in
> the water. The source VM no longer has up2date RAM contents and
> the destination VM does not yet have a complete disk image.
>
Yes. It's a trade off. However, pre-copy doesn't really change your
likelihood of catastrophic failure because if you were going to fail in
the source, it was going to happen before you completed the block
transfer anyway.
The advantage of post-copy is that you immediately free resources on the
source so as a reaction to pressure from overcommit, it's tremendously
useful.
I still think pre-copy has it's place though.
Regards,
Anthony Liguori
> Regards,
> Daniel
>
next prev parent reply other threads:[~2010-09-07 15:16 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-07 13:41 [Qemu-devel] QEMU interfaces for image streaming and post-copy block migration Anthony Liguori
2010-09-07 14:01 ` Alexander Graf
2010-09-07 14:31 ` Anthony Liguori
2010-09-07 14:33 ` Stefan Hajnoczi
2010-09-07 14:51 ` Anthony Liguori
2010-09-07 14:55 ` Stefan Hajnoczi
2010-09-07 15:00 ` Anthony Liguori
2010-09-07 15:09 ` Stefan Hajnoczi
2010-09-07 15:20 ` Anthony Liguori
2010-09-08 8:26 ` Kevin Wolf
2010-09-07 14:34 ` Kevin Wolf
2010-09-07 14:49 ` Stefan Hajnoczi
2010-09-07 14:57 ` Anthony Liguori
2010-09-07 15:05 ` Stefan Hajnoczi
2010-09-07 15:23 ` Anthony Liguori
2010-09-12 12:41 ` Avi Kivity
2010-09-12 13:25 ` Anthony Liguori
2010-09-12 13:40 ` Avi Kivity
2010-09-12 15:23 ` Anthony Liguori
2010-09-12 16:45 ` Avi Kivity
2010-09-12 17:19 ` Anthony Liguori
2010-09-12 17:31 ` Avi Kivity
2010-09-07 14:49 ` Anthony Liguori
2010-09-07 15:02 ` Kevin Wolf
2010-09-07 15:11 ` Anthony Liguori
2010-09-07 15:20 ` Kevin Wolf
2010-09-07 15:30 ` Anthony Liguori
2010-09-07 15:39 ` Kevin Wolf
2010-09-07 16:00 ` Anthony Liguori
2010-09-07 15:03 ` [Qemu-devel] " Daniel P. Berrange
2010-09-07 15:16 ` Anthony Liguori [this message]
2010-09-12 10:55 ` [Qemu-devel] " Avi Kivity
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C86574C.8070405@linux.vnet.ibm.com \
--to=aliguori@linux.vnet.ibm.com \
--cc=berrange@redhat.com \
--cc=libvir-list@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.