From: zhanghailiang <zhang.zhanghailiang@huawei.com>
To: Eric Blake <eblake@redhat.com>, qemu-devel@nongnu.org
Cc: lizhijian@cn.fujitsu.com, quintela@redhat.com,
Markus Armbruster <armbru@redhat.com>,
yunhong.jiang@intel.com, eddie.dong@intel.com,
peter.huangpeng@huawei.com, dgilbert@redhat.com,
arei.gonglei@huawei.com, stefanha@redhat.com,
amit.shah@redhat.com, yanghy@cn.fujitsu.com
Subject: Re: [Qemu-devel] [PATCH COLO-Frame v9 02/32] migration: Introduce capability 'colo' to migration
Date: Thu, 8 Oct 2015 14:34:40 +0800 [thread overview]
Message-ID: <56160E80.8080309@huawei.com> (raw)
In-Reply-To: <560EAA9A.4080708@redhat.com>
On 2015/10/3 0:02, Eric Blake wrote:
> On 09/02/2015 02:22 AM, zhanghailiang wrote:
>> We add helper function colo_supported() to indicate whether
>> colo is supported or not, with which we use to control whether or not
>> showing 'colo' string to users, they can use qmp command
>> 'query-migrate-capabilities' or hmp command 'info migrate_capabilities'
>> to learn if colo is supported.
>>
>> Cc: Juan Quintela <quintela@redhat.com>
>> Cc: Amit Shah <amit.shah@redhat.com>
>> Cc: Eric Blake <eblake@redhat.com>
>> Cc: Markus Armbruster <armbru@redhat.com>
>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>> Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
>> Signed-off-by: Gonglei <arei.gonglei@huawei.com>
>> ---
>
>> +++ b/migration/colo.c
>> @@ -0,0 +1,18 @@
>> +/*
>> + * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
>> + * (a.k.a. Fault Tolerance or Continuous Replication)
>> + *
>> + * Copyright (c) 2015 HUAWEI TECHNOLOGIES CO., LTD.
>> + * Copyright (c) 2015 FUJITSU LIMITED
>> + * Copyright (c) 2015 Intel Corporation
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> + * later. See the COPYING file in the top-level directory.
>> + */
>> +
>> +#include "migration/colo.h"
>> +
>> +bool colo_supported(void)
>> +{
>> + return true;
>> +}
>
> So this exists because you have a configure option that says whether to
> include or exclude this .o file (the backup stub version returns false
> if this file is not included)...
>
>> diff --git a/migration/migration.c b/migration/migration.c
>> index 662e77e..593cac0 100644
>> --- a/migration/migration.c
>> +++ b/migration/migration.c
>> @@ -29,6 +29,7 @@
>> #include "trace.h"
>> #include "qapi/util.h"
>> #include "qapi-event.h"
>> +#include "migration/colo.h"
>>
>> #define MAX_THROTTLE (32 << 20) /* Migration speed throttling */
>>
>> @@ -345,6 +346,9 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
>>
>> caps = NULL; /* silence compiler warning */
>> for (i = 0; i < MIGRATION_CAPABILITY_MAX; i++) {
>> + if (i == MIGRATION_CAPABILITY_COLO && !colo_supported()) {
>> + continue;
>> + }
>
> ...and here, you use the result to explicitly remove the colo migration
> property from the runtime result of query-migrate-capabilities if
> support was not compiled in. That's a good thing, because it means that
> a client can call query-migrate-capabilities, and immediately know if
> qemu supports colo by whether the migration property is present.
>
> Especially since the new query-qmp-schema WILL show colo as a member of
> the enum of possible values. Knowing that the enum supports a value
> doesn't tell you whether runtime supports use of the value, so your
> approach definitely helps in a place where static introspection doesn't
> solve everything.
>
Yes, that is the reason we add it.
>> if (head == NULL) {
>> head = g_malloc0(sizeof(*caps));
>> caps = head;
>> @@ -485,6 +489,13 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
>> }
>>
>> for (cap = params; cap; cap = cap->next) {
>> + if (cap->value->capability == MIGRATION_CAPABILITY_COLO &&
>> + !colo_supported()) {
>> + error_setg(errp, "COLO is not currently supported, please"
>> + " configure with --enable-colo option in order to"
>> + " support COLO feature");
>> + continue;
>
> Likewise, you explicitly reject attempts to change the property, where
> introspection says the enum supports the property. It might be
> acceptable to silently permit attempts to set the capability to false
> (the value it already has) and only reject attempts to set it to true,
> but I'm not sure if the difference is worth it.
>
Ha, maybe you have forgotten, in last version, you pointed out that maybe it was
better to give this error message regardless of true/false being requested,
and i think it is reasonable, so i will keep it like this ;)
>> + }
>> s->enabled_capabilities[cap->value->capability] = cap->value->state;
>> }
>> }
>> @@ -913,6 +924,12 @@ int64_t migrate_xbzrle_cache_size(void)
>> return s->xbzrle_cache_size;
>> }
>>
>> +bool migrate_enable_colo(void)
>> +{
>> + MigrationState *s = migrate_get_current();
>> + return s->enabled_capabilities[MIGRATION_CAPABILITY_COLO];
>
> Function name is wrong - it sounds like an imperative command (call this
> to enable colo), when it is really a query command (call this to learn
> if colo is enabled). Maybe migrate_colo_enabled()?
>
Sounds reasonable, will fix in next version.
>> +}
>> +
>> /* migration thread support */
>>
>> static void *migration_thread(void *opaque)
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index 5f45571..b14d1f4 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -529,11 +529,15 @@
>> # @auto-converge: If enabled, QEMU will automatically throttle down the guest
>> # to speed up convergence of RAM migration. (since 1.6)
>> #
>> +# @colo: If enabled, migration will never end, and the state of the VM on the
>> +# primary side will be migrated continuously to the VM on secondary
>> +# side. (since 2.5)
>
> You may want to name this property 'x-colo' to mark it experimental;
> especially since there are still a lot of other things waiting to go in
> and we are getting closer to 2.5 freeze. Making the property
> experimental will relieve the pressure of having to get everything right
> on the first try, although it also means that libvirt won't use the
> property until we graduate it from experimental 'x-colo' to
> fully-supported 'colo'.
>
Got it, will fix it in next version, thanks.
next prev parent reply other threads:[~2015-10-08 6:38 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-02 8:22 [Qemu-devel] [PATCH COLO-Frame v9 00/32] COarse-grain LOck-stepping(COLO) Virtual Machines for Non-stop Service (FT) zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 01/32] configure: Add parameter for configure to enable/disable COLO support zhanghailiang
2015-10-02 15:10 ` Dr. David Alan Gilbert
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 02/32] migration: Introduce capability 'colo' to migration zhanghailiang
2015-10-02 16:02 ` Eric Blake
2015-10-08 6:34 ` zhanghailiang [this message]
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 03/32] COLO: migrate colo related info to slave zhanghailiang
2015-10-02 18:45 ` Dr. David Alan Gilbert
2015-10-08 6:48 ` zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 04/32] migration: Add state records for migration incoming zhanghailiang
2015-10-09 16:18 ` Dr. David Alan Gilbert
2015-10-10 7:07 ` zhanghailiang
2015-10-16 11:14 ` Dr. David Alan Gilbert
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 05/32] migration: Integrate COLO checkpoint process into migration zhanghailiang
2015-10-09 16:53 ` Dr. David Alan Gilbert
2015-10-10 6:25 ` zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 06/32] migration: Integrate COLO checkpoint process into loadvm zhanghailiang
2015-10-19 9:17 ` Dr. David Alan Gilbert
2015-10-20 8:04 ` zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 07/32] migration: Rename the'file' member of MigrationState and MigrationIncomingState zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 08/32] COLO/migration: establish a new communication path from destination to source zhanghailiang
2015-10-19 9:54 ` Dr. David Alan Gilbert
2015-10-20 8:30 ` zhanghailiang
2015-10-20 19:32 ` Dr. David Alan Gilbert
2015-10-21 8:33 ` zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 09/32] COLO: Implement colo checkpoint protocol zhanghailiang
2015-10-21 12:17 ` Eric Blake
2015-10-22 7:13 ` zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 10/32] COLO: Add a new RunState RUN_STATE_COLO zhanghailiang
2015-10-21 12:18 ` Eric Blake
2015-10-22 6:58 ` zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 11/32] QEMUSizedBuffer: Introduce two help functions for qsb zhanghailiang
2015-09-02 8:22 ` [Qemu-devel] [PATCH COLO-Frame v9 12/32] COLO: Save PVM state to secondary side when do checkpoint zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 13/32] COLO: Load PVM's dirty pages into SVM's RAM cache temporarily zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 14/32] COLO: Load VMState into qsb before restore it zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 15/32] COLO: Flush PVM's cached RAM into SVM's memory zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 16/32] COLO: synchronize PVM's state to SVM periodically zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 17/32] COLO failover: Introduce a new command to trigger a failover zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 18/32] COLO failover: Introduce state to record failover process zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 19/32] COLO: Implement failover work for Primary VM zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 20/32] COLO: Implement failover work for Secondary VM zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 21/32] COLO: implement default failover treatment zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 22/32] qmp event: Add event notification for COLO error zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 23/32] COLO failover: Shutdown related socket fd when do failover zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 24/32] COLO failover: Don't do failover during loading VM's state zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 25/32] COLO: Control the checkpoint delay time by migrate-set-parameters command zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 26/32] COLO: Implement shutdown checkpoint zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 27/32] COLO: Update the global runstate after going into colo state zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 28/32] savevm: Split load vm state function qemu_loadvm_state zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 29/32] COLO: Separate the process of saving/loading ram and device state zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 30/32] COLO: Split qemu_savevm_state_begin out of checkpoint process zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 31/32] COLO: Add block replication into colo process zhanghailiang
2015-09-02 8:23 ` [Qemu-devel] [PATCH COLO-Frame v9 32/32] COLO: Add net packets treatment into COLO zhanghailiang
2015-09-02 9:03 ` [Qemu-devel] [PATCH COLO-Frame v9 00/32] COarse-grain LOck-stepping(COLO) Virtual Machines for Non-stop Service (FT) Yang Hongyang
2015-09-02 9:17 ` zhanghailiang
2015-09-09 3:36 ` zhanghailiang
2015-09-15 10:40 ` zhanghailiang
2015-10-21 14:10 ` Dr. David Alan Gilbert
2015-10-22 9:01 ` zhanghailiang
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=56160E80.8080309@huawei.com \
--to=zhang.zhanghailiang@huawei.com \
--cc=amit.shah@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=eddie.dong@intel.com \
--cc=lizhijian@cn.fujitsu.com \
--cc=peter.huangpeng@huawei.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
--cc=yanghy@cn.fujitsu.com \
--cc=yunhong.jiang@intel.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).