From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47691) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yb0Q9-0001Cf-Pt for qemu-devel@nongnu.org; Thu, 26 Mar 2015 01:33:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yb0Q8-0007T7-Fm for qemu-devel@nongnu.org; Thu, 26 Mar 2015 01:33:33 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:42132) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yb0Pj-0007Mu-3b for qemu-devel@nongnu.org; Thu, 26 Mar 2015 01:33:32 -0400 From: zhanghailiang Date: Thu, 26 Mar 2015 13:29:30 +0800 Message-ID: <1427347774-8960-25-git-send-email-zhang.zhanghailiang@huawei.com> In-Reply-To: <1427347774-8960-1-git-send-email-zhang.zhanghailiang@huawei.com> References: <1427347774-8960-1-git-send-email-zhang.zhanghailiang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [RFC PATCH v4 24/28] 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, yunhong.jiang@intel.com, eddie.dong@intel.com, peter.huangpeng@huawei.com, dgilbert@redhat.com, zhanghailiang , arei.gonglei@huawei.com, amit.shah@redhat.com, david@gibson.dropbear.id.au With this command, we can control the period of checkpoint, if there is no comparison of net packets. 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 e615889..bea01a6 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1008,6 +1008,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 ee0e139..bd880af 100644 --- a/hmp.c +++ b/hmp.c @@ -1191,6 +1191,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 af85144..f7d23bb 100644 --- a/hmp.h +++ b/hmp.h @@ -66,6 +66,7 @@ void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict); void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict); void hmp_migrate_set_cache_size(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 da5bc5e..1c4b222 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -16,6 +16,7 @@ #include "qemu/error-report.h" #include "migration/migration-failover.h" #include "net/colo-nic.h" +#include "qmp-commands.h" #define DEBUG_COLO 0 @@ -78,6 +79,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 (1000*1000*4ULL) QEMUSizedBuffer *colo_buffer; @@ -93,6 +97,11 @@ bool migrate_in_colo_state(void) return (s->state == MIGRATION_STATUS_COLO); } +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(); @@ -366,7 +375,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 8abc367..915a9cb 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -576,6 +576,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 85d3d72..ab7e4a1 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 61fe22b..368590a 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