From: "Daniel P. Berrange" <berrange@redhat.com>
To: "Benoît Canet" <benoit.canet@irqsave.net>
Cc: aliguori@us.ibm.com, "Benoît Canet" <benoit.canet@gmail.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/2] migration: Allow the migrate command to work on file: urls
Date: Thu, 23 Aug 2012 13:58:21 +0100 [thread overview]
Message-ID: <20120823125821.GE10833@redhat.com> (raw)
In-Reply-To: <20120823124819.GA17575@irqsave.net>
On Thu, Aug 23, 2012 at 02:48:19PM +0200, Benoît Canet wrote:
> Le Thursday 23 Aug 2012 à 13:34:01 (+0100), Daniel P. Berrange a écrit :
> > On Thu, Aug 23, 2012 at 02:28:07PM +0200, Benoît Canet wrote:
> > > Usage:
> > > (qemu) migrate file:/path/to/vm_statefile
> > >
> > > Signed-off-by: Benoit Canet <benoit@irqsave.net>
> > > ---
> > > migration-fd.c | 4 ++--
> > > migration.c | 20 +++++++++++++++++++-
> > > migration.h | 2 +-
> > > 3 files changed, 22 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/migration-fd.c b/migration-fd.c
> > > index 50138ed..d39e44a 100644
> > > --- a/migration-fd.c
> > > +++ b/migration-fd.c
> > > @@ -73,9 +73,9 @@ static int fd_close(MigrationState *s)
> > > return 0;
> > > }
> > >
> > > -int fd_start_outgoing_migration(MigrationState *s, const char *fdname)
> > > +int fd_start_outgoing_migration(MigrationState *s, const char *fdname, int fd)
> > > {
> > > - s->fd = monitor_get_fd(cur_mon, fdname);
> > > + s->fd = fd ? fd : monitor_get_fd(cur_mon, fdname);
> > > if (s->fd == -1) {
> > > DPRINTF("fd_migration: invalid file descriptor identifier\n");
> > > goto err_after_get_fd;
> > > diff --git a/migration.c b/migration.c
> > > index 1edeec5..679847d 100644
> > > --- a/migration.c
> > > +++ b/migration.c
> > > @@ -239,9 +239,14 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
> > > static int migrate_fd_cleanup(MigrationState *s)
> > > {
> > > int ret = 0;
> > > + struct stat st;
> > >
> > > qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
> > >
> > > + if (!fstat(s->fd, &st) && S_ISREG(st.st_mode)) {
> > > + fsync(s->fd);
> > > + }
> > > +
> > > if (s->file) {
> > > DPRINTF("closing file\n");
> > > ret = qemu_fclose(s->file);
> > > @@ -475,6 +480,17 @@ void migrate_del_blocker(Error *reason)
> > > migration_blockers = g_slist_remove(migration_blockers, reason);
> > > }
> > >
> > > +static int file_start_outgoing_migration(MigrationState *s,
> > > + const char *filename)
> > > +{
> > > + int fd;
> > > + fd = open(filename, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S_IWUSR);
> > > + if (fd < 0) {
> > > + return -errno;
> > > + }
> > > + return fd_start_outgoing_migration(s, NULL, fd);
> >
> > 'fd_start_outgoing_migration' requires that the FD you give it
> > supports non-blocking I/O. File descriptors opened from plain
> > files or block devices do not honour that requirement. So this
> > proposed code will cause the entire QEMU process to block while
> > migration is taking place. This is why no on has ever implemented
> > the 'file:' protocol in QEMU before.
>
> When I run the code it appear it does not block all the time.
> (guest is still interactive most of the time needed to complete migration)
> How can it be ?
The default migration bandwidth limit means qemu throttles the rate at
which it sends data, so you won't notice the flaw with I/O blocking.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
next prev parent reply other threads:[~2012-08-23 12:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-23 12:28 [Qemu-devel] [PATCH 0/2] Add file url support to migration Benoît Canet
2012-08-23 12:28 ` [Qemu-devel] [PATCH 1/2] migration: Allow the migrate command to work on file: urls Benoît Canet
2012-08-23 12:34 ` Daniel P. Berrange
2012-08-23 12:48 ` Benoît Canet
2012-08-23 12:58 ` Daniel P. Berrange [this message]
2012-08-23 13:34 ` Benoît Canet
2012-08-27 7:36 ` Benoît Canet
2012-08-28 13:11 ` Luiz Capitulino
2012-08-23 12:28 ` [Qemu-devel] [PATCH 2/2] migration: Allow -incoming " Benoît Canet
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=20120823125821.GE10833@redhat.com \
--to=berrange@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=benoit.canet@gmail.com \
--cc=benoit.canet@irqsave.net \
--cc=qemu-devel@nongnu.org \
/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.