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 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.