From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Amit Shah <amit.shah@redhat.com>
Cc: Changlong Xie <xiecl.fnst@cn.fujitsu.com>,
qemu devel <qemu-devel@nongnu.org>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
Anthony PERARD <anthony.perard@citrix.com>,
Juan Quintela <quintela@redhat.com>,
Eric Blake <eblake@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Wen Congyang <wency@cn.fujitsu.com>,
zhanghailiang <zhang.zhanghailiang@huawei.com>
Subject: Re: [Qemu-devel] [PATCH v4 1/1] Introduce "xen-load-devices-state"
Date: Wed, 1 Jun 2016 18:23:00 +0100 [thread overview]
Message-ID: <20160601172300.GD2310@work-vm> (raw)
In-Reply-To: <20160527155854.GF4456@grmbl.mre>
* Amit Shah (amit.shah@redhat.com) wrote:
> Dave, can you take a look?
Yes, I think I'm happy with it;
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
I think people might try interesting non-Xen things with it; for
example I think if you backed QEMU's main RAM by a /tmp file
perhaps you could start a guest up even under KVM just
by loading the devices.
Dave
>
> Thanks,
>
> On (Mon) 11 Apr 2016 [11:56:02], Changlong Xie wrote:
> > From: Wen Congyang <wency@cn.fujitsu.com>
> >
> > Introduce a "xen-load-devices-state" QAPI command that can be used to
> > load the state of all devices, but not the RAM or the block devices of
> > the VM.
> >
> > We only have hmp commands savevm/loadvm, and qmp commands
> > xen-save-devices-state.
> >
> > We use this new command for COLO:
> > 1. suspend both primary vm and secondary vm
> > 2. sync the state
> > 3. resume both primary vm and secondary vm
> >
> > In such case, we need to update all devices' state in any time.
> >
> > Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> > Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
> > ---
> > migration/savevm.c | 36 ++++++++++++++++++++++++++++++++++++
> > qapi-schema.json | 14 ++++++++++++++
> > qmp-commands.hx | 27 +++++++++++++++++++++++++++
> > 3 files changed, 77 insertions(+)
> >
> > diff --git a/migration/savevm.c b/migration/savevm.c
> > index 16ba443..d361a29 100644
> > --- a/migration/savevm.c
> > +++ b/migration/savevm.c
> > @@ -30,6 +30,7 @@
> > #include "hw/boards.h"
> > #include "hw/hw.h"
> > #include "hw/qdev.h"
> > +#include "hw/xen/xen.h"
> > #include "net/net.h"
> > #include "monitor/monitor.h"
> > #include "sysemu/sysemu.h"
> > @@ -1775,6 +1776,12 @@ qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
> > return -EINVAL;
> > }
> >
> > + /* Validate if it is a device's state */
> > + if (xen_enabled() && se->is_ram) {
> > + error_report("loadvm: %s RAM loading not allowed on Xen", idstr);
> > + return -EINVAL;
> > + }
> > +
> > /* Add entry */
> > le = g_malloc0(sizeof(*le));
> >
> > @@ -2084,6 +2091,35 @@ void qmp_xen_save_devices_state(const char *filename, Error **errp)
> > }
> > }
> >
> > +void qmp_xen_load_devices_state(const char *filename, Error **errp)
> > +{
> > + QEMUFile *f;
> > + int ret;
> > +
> > + /* Guest must be paused before loading the device state; the RAM state
> > + * will already have been loaded by xc
> > + */
> > + if (runstate_is_running()) {
> > + error_setg(errp, "Cannot update device state while vm is running");
> > + return;
> > + }
> > + vm_stop(RUN_STATE_RESTORE_VM);
> > +
> > + f = qemu_fopen(filename, "rb");
> > + if (!f) {
> > + error_setg_file_open(errp, errno, filename);
> > + return;
> > + }
> > +
> > + migration_incoming_state_new(f);
> > + ret = qemu_loadvm_state(f);
> > + qemu_fclose(f);
> > + if (ret < 0) {
> > + error_setg(errp, QERR_IO_ERROR);
> > + }
> > + migration_incoming_state_destroy();
> > +}
> > +
> > int load_vmstate(const char *name)
> > {
> > BlockDriverState *bs, *bs_vm_state;
> > diff --git a/qapi-schema.json b/qapi-schema.json
> > index 54634c4..132264f 100644
> > --- a/qapi-schema.json
> > +++ b/qapi-schema.json
> > @@ -4144,6 +4144,20 @@
> > 'data': [ 'none', 'record', 'play' ] }
> >
> > ##
> > +# @xen-load-devices-state:
> > +#
> > +# Load the state of all devices from file. The RAM and the block devices
> > +# of the VM are not loaded by this command.
> > +#
> > +# @filename: the file to load the state of the devices from as binary
> > +# data. See xen-save-devices-state.txt for a description of the binary
> > +# format.
> > +#
> > +# Since: 2.7
> > +##
> > +{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
> > +
> > +##
> > # @GICCapability:
> > #
> > # The struct describes capability for a specific GIC (Generic
> > diff --git a/qmp-commands.hx b/qmp-commands.hx
> > index de896a5..68620f6 100644
> > --- a/qmp-commands.hx
> > +++ b/qmp-commands.hx
> > @@ -587,6 +587,33 @@ Example:
> > EQMP
> >
> > {
> > + .name = "xen-load-devices-state",
> > + .args_type = "filename:F",
> > + .mhandler.cmd_new = qmp_marshal_xen_load_devices_state,
> > + },
> > +
> > +SQMP
> > +xen-load-devices-state
> > +----------------------
> > +
> > +Load the state of all devices from file. The RAM and the block devices
> > +of the VM are not loaded by this command.
> > +
> > +Arguments:
> > +
> > +- "filename": the file to load the state of the devices from as binary
> > +data. See xen-save-devices-state.txt for a description of the binary
> > +format.
> > +
> > +Example:
> > +
> > +-> { "execute": "xen-load-devices-state",
> > + "arguments": { "filename": "/tmp/resume" } }
> > +<- { "return": {} }
> > +
> > +EQMP
> > +
> > + {
> > .name = "xen-set-global-dirty-log",
> > .args_type = "enable:b",
> > .mhandler.cmd_new = qmp_marshal_xen_set_global_dirty_log,
> > --
> > 1.9.3
> >
> >
> >
>
> Amit
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2016-06-01 17:23 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-11 3:56 [Qemu-devel] [PATCH v4 0/1] Introduce "xen-load-devices-state" Changlong Xie
2016-04-11 3:56 ` [Qemu-devel] [PATCH v4 1/1] " Changlong Xie
2016-05-27 11:18 ` Anthony PERARD
2016-05-30 15:17 ` Stefano Stabellini
2016-05-31 18:47 ` Eric Blake
2016-05-27 15:58 ` Amit Shah
2016-06-01 17:23 ` Dr. David Alan Gilbert [this message]
2016-06-02 10:01 ` Stefano Stabellini
2016-06-02 10:13 ` Stefano Stabellini
2016-06-02 10:16 ` Dr. David Alan Gilbert
2016-06-02 10:37 ` Changlong Xie
2016-04-20 3:35 ` [Qemu-devel] [PATCH v4 0/1] " Changlong Xie
2016-05-26 10:12 ` Changlong Xie
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=20160601172300.GD2310@work-vm \
--to=dgilbert@redhat.com \
--cc=amit.shah@redhat.com \
--cc=anthony.perard@citrix.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=wency@cn.fujitsu.com \
--cc=xiecl.fnst@cn.fujitsu.com \
--cc=zhang.zhanghailiang@huawei.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.