From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43071) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZD2Ly-0005iH-8N for qemu-devel@nongnu.org; Wed, 08 Jul 2015 23:18:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZD2Lt-0007ZR-KO for qemu-devel@nongnu.org; Wed, 08 Jul 2015 23:18:25 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:38691) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZD2Lt-0007Yu-1B for qemu-devel@nongnu.org; Wed, 08 Jul 2015 23:18:21 -0400 From: zhanghailiang Date: Thu, 9 Jul 2015 11:16:38 +0800 Message-ID: <1436411802-181876-31-git-send-email-zhang.zhanghailiang@huawei.com> In-Reply-To: <1436411802-181876-1-git-send-email-zhang.zhanghailiang@huawei.com> References: <1436411802-181876-1-git-send-email-zhang.zhanghailiang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH COLO-Frame v7 30/34] COLO: Add colo-set-checkpoint-period command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: lizhijian@cn.fujitsu.com, quintela@redhat.com, Markus Armbruster , yunhong.jiang@intel.com, eddie.dong@intel.com, peter.huangpeng@huawei.com, dgilbert@redhat.com, arei.gonglei@huawei.com, amit.shah@redhat.com, Luiz Capitulino , zhanghailiang With this command, we can control the period of checkpoint, if there is no comparison of net packets. Cc: Luiz Capitulino Cc: Eric Blake Cc: Markus Armbruster Signed-off-by: zhanghailiang Signed-off-by: Li Zhijian --- hmp-commands.hx | 15 +++++++++++++++ hmp.c | 7 +++++++ hmp.h | 1 + migration/colo.c | 11 ++++++++++- qapi-schema.json | 13 +++++++++++++ qmp-commands.hx | 22 ++++++++++++++++++++++ stubs/migration-colo.c | 4 ++++ 7 files changed, 72 insertions(+), 1 deletion(-) diff --git a/hmp-commands.hx b/hmp-commands.hx index 410637f..9164961 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1049,6 +1049,21 @@ Tell COLO that heartbeat is lost, a failover or takeover is needed. ETEXI { + .name = "colo_set_checkpoint_period", + .args_type = "value:i", + .params = "value", + .help = "set checkpoint period (in ms) for colo. " + "Defaults to 100ms", + .mhandler.cmd = hmp_colo_set_checkpoint_period, + }, + +STEXI +@item migrate_set_checkpoint_period @var{value} +@findex migrate_set_checkpoint_period +Set checkpoint period to @var{value} (in ms) for colo. +ETEXI + + { .name = "client_migrate_info", .args_type = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?", .params = "protocol hostname port tls-port cert-subject", diff --git a/hmp.c b/hmp.c index 7f3a8a9..c464fc9 100644 --- a/hmp.c +++ b/hmp.c @@ -1280,6 +1280,13 @@ void hmp_colo_lost_heartbeat(Monitor *mon, const QDict *qdict) hmp_handle_error(mon, &err); } +void hmp_colo_set_checkpoint_period(Monitor *mon, const QDict *qdict) +{ + int64_t value = qdict_get_int(qdict, "value"); + + qmp_colo_set_checkpoint_period(value, NULL); +} + void hmp_set_password(Monitor *mon, const QDict *qdict) { const char *protocol = qdict_get_str(qdict, "protocol"); diff --git a/hmp.h b/hmp.h index c36c99c..d66dc76 100644 --- a/hmp.h +++ b/hmp.h @@ -69,6 +69,7 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict); void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict); void hmp_client_migrate_info(Monitor *mon, const QDict *qdict); void hmp_colo_lost_heartbeat(Monitor *mon, const QDict *qdict); +void hmp_colo_set_checkpoint_period(Monitor *mon, const QDict *qdict); void hmp_set_password(Monitor *mon, const QDict *qdict); void hmp_expire_password(Monitor *mon, const QDict *qdict); void hmp_eject(Monitor *mon, const QDict *qdict); diff --git a/migration/colo.c b/migration/colo.c index 64862dc..375088b 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -18,6 +18,7 @@ #include "migration/failover.h" #include "qapi-event.h" #include "net/colo-nic.h" +#include "qmp-commands.h" /* * We should not do checkpoint one after another without any time interval, @@ -71,6 +72,9 @@ enum { static QEMUBH *colo_bh; static bool vmstate_loading; static Coroutine *colo; + +int64_t colo_checkpoint_period = CHECKPOINT_MAX_PEROID; + /* colo buffer */ #define COLO_BUFFER_BASE_SIZE (4 * 1024 * 1024) QEMUSizedBuffer *colo_buffer; @@ -91,6 +95,11 @@ bool loadvm_in_colo_state(void) return colo != NULL; } +void qmp_colo_set_checkpoint_period(int64_t value, Error **errp) +{ + colo_checkpoint_period = value; +} + static bool colo_runstate_is_stopped(void) { return runstate_check(RUN_STATE_COLO) || !runstate_is_running(); @@ -391,7 +400,7 @@ static void *colo_thread(void *opaque) * and then check if we need checkpoint again. */ current_time = qemu_clock_get_ms(QEMU_CLOCK_HOST); - if (current_time - checkpoint_time < CHECKPOINT_MAX_PEROID) { + if (current_time - checkpoint_time < colo_checkpoint_period) { g_usleep(100000); continue; } diff --git a/qapi-schema.json b/qapi-schema.json index 91c4ea5..2bb8778 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -691,6 +691,19 @@ { 'command': 'colo-lost-heartbeat' } ## +# @colo-set-checkpoint-period +# +# Set colo checkpoint period +# +# @value: period of colo checkpoint in ms +# +# Returns: nothing on success +# +# Since: 2.4 +## +{ 'command': 'colo-set-checkpoint-period', 'data': {'value': 'int'} } + +## # @MouseInfo: # # Information about a mouse device. diff --git a/qmp-commands.hx b/qmp-commands.hx index 443ef8e..3462ec8 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -800,6 +800,28 @@ Example: EQMP { + .name = "colo-set-checkpoint-period", + .args_type = "value:i", + .mhandler.cmd_new = qmp_marshal_input_colo_set_checkpoint_period, + }, + +SQMP +colo-set-checkpoint-period +-------------------------- + +set checkpoint period + +Arguments: +- "value": checkpoint period + +Example: + +-> { "execute": "colo-set-checkpoint-period", "arguments": { "value": "1000" } } +<- { "return": {} } + +EQMP + + { .name = "client_migrate_info", .args_type = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?", .params = "protocol hostname port tls-port cert-subject", diff --git a/stubs/migration-colo.c b/stubs/migration-colo.c index 91f35e9..c648935 100644 --- a/stubs/migration-colo.c +++ b/stubs/migration-colo.c @@ -52,3 +52,7 @@ void qmp_colo_lost_heartbeat(Error **errp) " with --enable-colo option in order to support" " COLO feature"); } + +void qmp_colo_set_checkpoint_period(int64_t value, Error **errp) +{ +} -- 1.7.12.4