qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: zhanghailiang <zhang.zhanghailiang@huawei.com>,
	Juan Quintela <quintela@redhat.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	qemu devel <qemu-devel@nongnu.org>,
	Markus Armbruster <armbru@redhat.com>,
	Amit Shah <amit.shah@redhat.com>,
	Anthony PERARD <anthony.perard@citrix.com>
Subject: Re: [Qemu-devel] [PATCH v2 1/1] Introduce "xen-load-devices-state"
Date: Wed, 23 Mar 2016 15:25:51 +0800	[thread overview]
Message-ID: <56F244FF.2050406@cn.fujitsu.com> (raw)
In-Reply-To: <20160322122222.GE2216@work-vm>

On 03/22/2016 08:22 PM, Dr. David Alan Gilbert wrote:
> * Changlong Xie (xiecl.fnst@cn.fujitsu.com) 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.
>
> Can you explain on Xen how the RAM actually gets loaded?

Xen use xc(xen toolstack) to do RAM restore/save

>
>>
>> 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 96e7db5..aaead12 100644
>> --- a/migration/savevm.c
>> +++ b/migration/savevm.c
>> @@ -50,6 +50,7 @@
>>   #include "qemu/iov.h"
>>   #include "block/snapshot.h"
>>   #include "block/qapi.h"
>> +#include "hw/xen/xen.h"
>>
>>
>>   #ifndef ETH_P_RARP
>> @@ -1768,6 +1769,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));
>>
>> @@ -2077,6 +2084,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 saved_vm_running;
>> +    int ret;
>> +
>> +    saved_vm_running = runstate_is_running();
>> +    vm_stop(RUN_STATE_RESTORE_VM);
>> +
>> +    f = qemu_fopen(filename, "rb");
>> +    if (!f) {
>> +        error_setg_file_open(errp, errno, filename);
>> +        goto out;
>> +    }
>> +
>> +    migration_incoming_state_new(f);
>> +    ret = qemu_loadvm_state(f);
>> +    qemu_fclose(f);
>> +    migration_incoming_state_destroy();
>> +    if (ret < 0) {
>> +        error_setg(errp, QERR_IO_ERROR);
>> +    }
>> +
>> +out:
>> +    if (saved_vm_running) {
>> +        vm_start();
>> +    }
>
> Does it ever happen that you had it running immediately
> before you did this command? Somehow you'd have to have loaded the RAM

No, we suspend vm before running this command in xen to make sure the 
condition that you discribed never happen.

Thanks
	-Xie

> at just the right point, and I don't see how that would happen if the guest
> was running.
>
> Dave
>
>> +}
>> +
>>   int load_vmstate(const char *name)
>>   {
>>       BlockDriverState *bs, *bs_vm_state;
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index 362c9d8..8cca59d 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -4122,3 +4122,17 @@
>>   ##
>>   { 'enum': 'ReplayMode',
>>     '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'} }
>> diff --git a/qmp-commands.hx b/qmp-commands.hx
>> index b629673..4925702 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
>>
>>
>>
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>
>
> .
>

  reply	other threads:[~2016-03-23  7:23 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-14  8:03 [Qemu-devel] [PATCH v2 0/1] Introduce "xen-load-devices-state" Changlong Xie
2016-03-14  8:03 ` [Qemu-devel] [PATCH v2 1/1] " Changlong Xie
2016-03-22  4:21   ` Changlong Xie
2016-03-22 11:27   ` Stefano Stabellini
2016-03-22 12:22   ` Dr. David Alan Gilbert
2016-03-23  7:25     ` Changlong Xie [this message]
2016-03-23  8:56       ` Dr. David Alan Gilbert
2016-03-23  9:02         ` Wen Congyang
2016-03-23  9:41           ` Dr. David Alan Gilbert
2016-03-23 10:12             ` Changlong Xie
2016-03-23 10:15               ` Dr. David Alan Gilbert
2016-03-14  9:07 ` [Qemu-devel] [PATCH v2 0/1] " 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=56F244FF.2050406@cn.fujitsu.com \
    --to=xiecl.fnst@cn.fujitsu.com \
    --cc=amit.shah@redhat.com \
    --cc=anthony.perard@citrix.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=stefano.stabellini@eu.citrix.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).