From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982150960318.44578510095573; Wed, 3 Jan 2018 04:22:30 -0800 (PST) Received: from localhost ([::1]:50589 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi3m-0007fp-QK for importer@patchew.org; Wed, 03 Jan 2018 07:22:18 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56602) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi1z-0006b0-MO for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi1y-0001vD-EN for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:27 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37690) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi1y-0001u8-4h for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:26 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4CC16883C7 for ; Wed, 3 Jan 2018 12:20:25 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 878CB63756; Wed, 3 Jan 2018 12:20:23 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:05 +0800 Message-Id: <20180103122017.14794-2-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 03 Jan 2018 12:20:25 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 01/13] migration: assert colo instead of check X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" When reaching here if we are still "active" it means we must be in colo state. After a quick discussion offlist, we decided to use the safer error_report(). Finally I want to use "switch" here rather than lots of complicated if clauses. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/migration/migration.c b/migration/migration.c index 4de3b551fe..5a12738447 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2309,7 +2309,15 @@ static void *migration_thread(void *opaque) } runstate_set(RUN_STATE_POSTMIGRATE); } else { - if (s->state =3D=3D MIGRATION_STATUS_ACTIVE && enable_colo) { + if (s->state =3D=3D MIGRATION_STATUS_ACTIVE) { + /* + * We should really assert here, but since it's during + * migration, let's try to reduce the usage of assertions. + */ + if (!enable_colo) { + error_report("%s: critical error: calling COLO code withou= t " + "COLO enabled", __func__); + } migrate_start_colo_process(s); qemu_savevm_state_cleanup(); /* --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982423264883.3109808095575; Wed, 3 Jan 2018 04:27:03 -0800 (PST) Received: from localhost ([::1]:50658 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi8M-0003Uq-DK for importer@patchew.org; Wed, 03 Jan 2018 07:27:02 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56620) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi21-0006bD-8u for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi20-0001xH-GL for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:29 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40348) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi20-0001wG-Ab for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:28 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 878B1C0587DF for ; Wed, 3 Jan 2018 12:20:27 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id BD34063756; Wed, 3 Jan 2018 12:20:25 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:06 +0800 Message-Id: <20180103122017.14794-3-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 03 Jan 2018 12:20:27 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 02/13] migration: qemu_savevm_state_cleanup() in cleanup X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Moving existing callers all into migrate_fd_cleanup(). It simplifies migration_thread() a bit. Reviewed-by: Juan Quintela Signed-off-by: Peter Xu --- migration/migration.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 5a12738447..2c2140006c 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1077,6 +1077,8 @@ static void migrate_fd_cleanup(void *opaque) qemu_bh_delete(s->cleanup_bh); s->cleanup_bh =3D NULL; =20 + qemu_savevm_state_cleanup(); + if (s->to_dst_file) { Error *local_err =3D NULL; =20 @@ -2290,13 +2292,6 @@ static void *migration_thread(void *opaque) end_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); =20 qemu_mutex_lock_iothread(); - /* - * The resource has been allocated by migration will be reused in COLO - * process, so don't release them. - */ - if (!enable_colo) { - qemu_savevm_state_cleanup(); - } if (s->state =3D=3D MIGRATION_STATUS_COMPLETED) { uint64_t transferred_bytes =3D qemu_ftell(s->to_dst_file); s->total_time =3D end_time - s->total_time; @@ -2319,7 +2314,6 @@ static void *migration_thread(void *opaque) "COLO enabled", __func__); } migrate_start_colo_process(s); - qemu_savevm_state_cleanup(); /* * Fixme: we will run VM in COLO no matter its old running stat= e. * After exited COLO, we will keep running. --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982151178261.4666594935004; Wed, 3 Jan 2018 04:22:31 -0800 (PST) Received: from localhost ([::1]:50590 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi3x-0007qi-8x for importer@patchew.org; Wed, 03 Jan 2018 07:22:29 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56635) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi23-0006cm-K6 for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi22-0001zq-Ox for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:31 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57778) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi22-0001yx-It for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:30 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BD361693C8 for ; Wed, 3 Jan 2018 12:20:29 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 03A4B63757; Wed, 3 Jan 2018 12:20:27 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:07 +0800 Message-Id: <20180103122017.14794-4-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 03 Jan 2018 12:20:29 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 03/13] migration: remove "enable_colo" var X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It's only used once, clean it up a bit. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 2c2140006c..9ba96ae301 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2177,7 +2177,6 @@ static void *migration_thread(void *opaque) bool entered_postcopy =3D false; /* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */ enum MigrationStatus current_active_state =3D MIGRATION_STATUS_ACTIVE; - bool enable_colo =3D migrate_colo_enabled(); =20 rcu_register_thread(); =20 @@ -2309,7 +2308,7 @@ static void *migration_thread(void *opaque) * We should really assert here, but since it's during * migration, let's try to reduce the usage of assertions. */ - if (!enable_colo) { + if (!migrate_colo_enabled()) { error_report("%s: critical error: calling COLO code withou= t " "COLO enabled", __func__); } --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982557342437.55741031490095; Wed, 3 Jan 2018 04:29:17 -0800 (PST) Received: from localhost ([::1]:50679 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWiAR-0006CY-9D for importer@patchew.org; Wed, 03 Jan 2018 07:29:11 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56663) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi28-0006gF-2N for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi24-00022E-UQ for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:59252) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi24-00021Q-Oi for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:32 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F073C49007 for ; Wed, 3 Jan 2018 12:20:31 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 389CF6375A; Wed, 3 Jan 2018 12:20:29 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:08 +0800 Message-Id: <20180103122017.14794-5-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 03 Jan 2018 12:20:31 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 04/13] migration: split use of MigrationState.total_time X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It was used either to: 1. store initial timestamp of migration start, and 2. store total time used by last migration Let's provide two parameters for each of them. Mix use of the two is slightly misleading. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 7 ++++--- migration/migration.h | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 9ba96ae301..343368c089 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -613,7 +613,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) info->has_status =3D true; info->has_total_time =3D true; info->total_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - - s->total_time; + - s->start_time; info->has_expected_downtime =3D true; info->expected_downtime =3D s->expected_downtime; info->has_setup_time =3D true; @@ -1270,7 +1270,8 @@ MigrationState *migrate_init(void) =20 migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_S= ETUP); =20 - s->total_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + s->start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + s->total_time =3D 0; return s; } =20 @@ -2293,7 +2294,7 @@ static void *migration_thread(void *opaque) qemu_mutex_lock_iothread(); if (s->state =3D=3D MIGRATION_STATUS_COMPLETED) { uint64_t transferred_bytes =3D qemu_ftell(s->to_dst_file); - s->total_time =3D end_time - s->total_time; + s->total_time =3D end_time - s->start_time; if (!entered_postcopy) { s->downtime =3D end_time - start_time; } diff --git a/migration/migration.h b/migration/migration.h index 663415fe48..233ad68705 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -103,6 +103,9 @@ struct MigrationState } rp_state; =20 double mbps; + /* Timestamp when recent migration starts (ms) */ + int64_t start_time; + /* Total time used by latest migration (ms) */ int64_t total_time; int64_t downtime; int64_t expected_downtime; --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982160224660.9226304310685; Wed, 3 Jan 2018 04:22:40 -0800 (PST) Received: from localhost ([::1]:50591 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi47-0007yy-6n for importer@patchew.org; Wed, 03 Jan 2018 07:22:39 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56673) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi28-0006gd-Jj for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi27-00024z-AH for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57832) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi27-00023v-0t for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:35 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 37CA681DFF for ; Wed, 3 Jan 2018 12:20:34 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6FF6563756; Wed, 3 Jan 2018 12:20:32 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:09 +0800 Message-Id: <20180103122017.14794-6-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 03 Jan 2018 12:20:34 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 05/13] migration: move vm_old_running into global state X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Firstly, it was passed around. Let's just move it into MigrationState just like many other variables as state of migration, renaming it to vm_was_running. One thing to mention is that for postcopy, we actually don't need this knowledge at all since postcopy can't resume a VM even if it fails (we can see that from the old code too: when we try to resume we also check against "entered_postcopy" variable). So further we do this: - in postcopy_start(), we don't update vm_old_running since useless - in migration_thread(), we don't need to check entered_postcopy when resume, since it's only used for precopy. Comment this out too for that variable definition. Reviewed-by: Juan Quintela Signed-off-by: Peter Xu --- migration/migration.c | 17 +++++++---------- migration/migration.h | 6 ++++++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 343368c089..ca0c600178 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1272,6 +1272,7 @@ MigrationState *migrate_init(void) =20 s->start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); s->total_time =3D 0; + s->vm_was_running =3D false; return s; } =20 @@ -1846,7 +1847,7 @@ static int await_return_path_close_on_source(Migratio= nState *ms) * Switch from normal iteration to postcopy * Returns non-0 on error */ -static int postcopy_start(MigrationState *ms, bool *old_vm_running) +static int postcopy_start(MigrationState *ms) { int ret; QIOChannelBuffer *bioc; @@ -1864,7 +1865,6 @@ static int postcopy_start(MigrationState *ms, bool *o= ld_vm_running) trace_postcopy_start_set_run(); =20 qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER); - *old_vm_running =3D runstate_is_running(); global_state_store(); ret =3D vm_stop_force_state(RUN_STATE_FINISH_MIGRATE); if (ret < 0) { @@ -2055,11 +2055,9 @@ static int migration_maybe_pause(MigrationState *s, * * @s: Current migration state * @current_active_state: The migration state we expect to be in - * @*old_vm_running: Pointer to old_vm_running flag * @*start_time: Pointer to time to update */ static void migration_completion(MigrationState *s, int current_active_sta= te, - bool *old_vm_running, int64_t *start_time) { int ret; @@ -2068,7 +2066,7 @@ static void migration_completion(MigrationState *s, i= nt current_active_state, qemu_mutex_lock_iothread(); *start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER); - *old_vm_running =3D runstate_is_running(); + s->vm_was_running =3D runstate_is_running(); ret =3D global_state_store(); =20 if (!ret) { @@ -2174,7 +2172,6 @@ static void *migration_thread(void *opaque) int64_t threshold_size =3D 0; int64_t start_time =3D initial_time; int64_t end_time; - bool old_vm_running =3D false; bool entered_postcopy =3D false; /* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */ enum MigrationStatus current_active_state =3D MIGRATION_STATUS_ACTIVE; @@ -2233,7 +2230,7 @@ static void *migration_thread(void *opaque) pend_nonpost <=3D threshold_size && atomic_read(&s->start_postcopy)) { =20 - if (!postcopy_start(s, &old_vm_running)) { + if (!postcopy_start(s)) { current_active_state =3D MIGRATION_STATUS_POSTCOPY= _ACTIVE; entered_postcopy =3D true; } @@ -2245,7 +2242,7 @@ static void *migration_thread(void *opaque) } else { trace_migration_thread_low_pending(pending_size); migration_completion(s, current_active_state, - &old_vm_running, &start_time); + &start_time); break; } } @@ -2318,9 +2315,9 @@ static void *migration_thread(void *opaque) * Fixme: we will run VM in COLO no matter its old running stat= e. * After exited COLO, we will keep running. */ - old_vm_running =3D true; + s->vm_was_running =3D true; } - if (old_vm_running && !entered_postcopy) { + if (s->vm_was_running) { vm_start(); } else { if (runstate_check(RUN_STATE_FINISH_MIGRATE)) { diff --git a/migration/migration.h b/migration/migration.h index 233ad68705..45053ae8c5 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -111,6 +111,12 @@ struct MigrationState int64_t expected_downtime; bool enabled_capabilities[MIGRATION_CAPABILITY__MAX]; int64_t setup_time; + /* + * Whether guest was running when we enter the completion stage. + * If migration is interrupted by any reason, we need to continue + * running the guest on source. + */ + bool vm_was_running; =20 /* Flag set once the migration has been asked to enter postcopy */ bool start_postcopy; --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982168139656.7765968516745; Wed, 3 Jan 2018 04:22:48 -0800 (PST) Received: from localhost ([::1]:50592 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi4A-00081Z-A4 for importer@patchew.org; Wed, 03 Jan 2018 07:22:42 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56692) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2A-0006i7-DC for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi29-00027T-G7 for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:38 -0500 Received: from mx1.redhat.com ([209.132.183.28]:35058) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi29-00026W-7C for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:37 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 73A887E420 for ; Wed, 3 Jan 2018 12:20:36 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id A94F863756; Wed, 3 Jan 2018 12:20:34 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:10 +0800 Message-Id: <20180103122017.14794-7-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 03 Jan 2018 12:20:36 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 06/13] migration: introduce downtime_start X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Introduce MigrationState.downtime_start to replace the local variable "start_time" in migration_thread to avoid passing things around. Reviewed-by: Juan Quintela Signed-off-by: Peter Xu --- migration/migration.c | 12 ++++-------- migration/migration.h | 2 ++ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index ca0c600178..bfe1a76254 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2055,16 +2055,14 @@ static int migration_maybe_pause(MigrationState *s, * * @s: Current migration state * @current_active_state: The migration state we expect to be in - * @*start_time: Pointer to time to update */ -static void migration_completion(MigrationState *s, int current_active_sta= te, - int64_t *start_time) +static void migration_completion(MigrationState *s, int current_active_sta= te) { int ret; =20 if (s->state =3D=3D MIGRATION_STATUS_ACTIVE) { qemu_mutex_lock_iothread(); - *start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + s->downtime_start =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER); s->vm_was_running =3D runstate_is_running(); ret =3D global_state_store(); @@ -2170,7 +2168,6 @@ static void *migration_thread(void *opaque) * measured bandwidth */ int64_t threshold_size =3D 0; - int64_t start_time =3D initial_time; int64_t end_time; bool entered_postcopy =3D false; /* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */ @@ -2241,8 +2238,7 @@ static void *migration_thread(void *opaque) qemu_savevm_state_iterate(s->to_dst_file, entered_postcopy= ); } else { trace_migration_thread_low_pending(pending_size); - migration_completion(s, current_active_state, - &start_time); + migration_completion(s, current_active_state); break; } } @@ -2293,7 +2289,7 @@ static void *migration_thread(void *opaque) uint64_t transferred_bytes =3D qemu_ftell(s->to_dst_file); s->total_time =3D end_time - s->start_time; if (!entered_postcopy) { - s->downtime =3D end_time - start_time; + s->downtime =3D end_time - s->downtime_start; } if (s->total_time) { s->mbps =3D (((double) transferred_bytes * 8.0) / diff --git a/migration/migration.h b/migration/migration.h index 45053ae8c5..867383f18d 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -107,6 +107,8 @@ struct MigrationState int64_t start_time; /* Total time used by latest migration (ms) */ int64_t total_time; + /* Timestamp when VM is down (ms) to migrate the last stuff */ + int64_t downtime_start; int64_t downtime; int64_t expected_downtime; bool enabled_capabilities[MIGRATION_CAPABILITY__MAX]; --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982307710920.0830848365617; Wed, 3 Jan 2018 04:25:07 -0800 (PST) Received: from localhost ([::1]:50633 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi6U-0001kf-SU for importer@patchew.org; Wed, 03 Jan 2018 07:25:06 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2C-0006kg-Sf for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi2B-00029k-Ls for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:40 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40464) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi2B-00028u-FV for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:39 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AC217C0587DF for ; Wed, 3 Jan 2018 12:20:38 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id DFEDC6375A; Wed, 3 Jan 2018 12:20:36 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:11 +0800 Message-Id: <20180103122017.14794-8-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 03 Jan 2018 12:20:38 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 07/13] migration: introduce migrate_calculate_complete X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Generalize the calculation part when migration complete into a function to simplify migration_thread(). Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index bfe1a76254..72f0b586f7 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2151,6 +2151,25 @@ bool migrate_colo_enabled(void) return s->enabled_capabilities[MIGRATION_CAPABILITY_X_COLO]; } =20 +static void migration_calculate_complete(MigrationState *s) +{ + uint64_t bytes =3D qemu_ftell(s->to_dst_file); + int64_t end_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + + s->total_time =3D end_time - s->start_time; + if (!s->downtime) { + /* + * It's still not set, so we are precopy migration. For + * postcopy, downtime is calculated during postcopy_start(). + */ + s->downtime =3D end_time - s->downtime_start; + } + + if (s->total_time) { + s->mbps =3D ((double) bytes * 8.0) / s->total_time / 1000; + } +} + /* * Master migration thread on the source VM. * It drives the migration and pumps the data down the outgoing channel. @@ -2168,7 +2187,6 @@ static void *migration_thread(void *opaque) * measured bandwidth */ int64_t threshold_size =3D 0; - int64_t end_time; bool entered_postcopy =3D false; /* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */ enum MigrationStatus current_active_state =3D MIGRATION_STATUS_ACTIVE; @@ -2282,19 +2300,10 @@ static void *migration_thread(void *opaque) trace_migration_thread_after_loop(); /* If we enabled cpu throttling for auto-converge, turn it off. */ cpu_throttle_stop(); - end_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); =20 qemu_mutex_lock_iothread(); if (s->state =3D=3D MIGRATION_STATUS_COMPLETED) { - uint64_t transferred_bytes =3D qemu_ftell(s->to_dst_file); - s->total_time =3D end_time - s->start_time; - if (!entered_postcopy) { - s->downtime =3D end_time - s->downtime_start; - } - if (s->total_time) { - s->mbps =3D (((double) transferred_bytes * 8.0) / - ((double) s->total_time)) / 1000; - } + migration_calculate_complete(s); runstate_set(RUN_STATE_POSTMIGRATE); } else { if (s->state =3D=3D MIGRATION_STATUS_ACTIVE) { --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982301036126.97597528350036; Wed, 3 Jan 2018 04:25:01 -0800 (PST) Received: from localhost ([::1]:50631 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi6O-0001fL-52 for importer@patchew.org; Wed, 03 Jan 2018 07:25:00 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56760) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2J-0006r7-T2 for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi2G-0002GZ-KC for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:47 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37774) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi2G-0002Fk-Db for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:44 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 95C0787649 for ; Wed, 3 Jan 2018 12:20:43 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 252F163756; Wed, 3 Jan 2018 12:20:38 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:12 +0800 Message-Id: <20180103122017.14794-9-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 03 Jan 2018 12:20:43 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 08/13] migration: use switch at the end of migration X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It converts the old if clauses into switch, explicitly mentions the possible migration states. The old nested "if"s are not clear on what we do on different states. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 72f0b586f7..4dd21f8636 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2302,26 +2302,30 @@ static void *migration_thread(void *opaque) cpu_throttle_stop(); =20 qemu_mutex_lock_iothread(); - if (s->state =3D=3D MIGRATION_STATUS_COMPLETED) { + switch (s->state) { + case MIGRATION_STATUS_COMPLETED: migration_calculate_complete(s); runstate_set(RUN_STATE_POSTMIGRATE); - } else { - if (s->state =3D=3D MIGRATION_STATUS_ACTIVE) { - /* - * We should really assert here, but since it's during - * migration, let's try to reduce the usage of assertions. - */ - if (!migrate_colo_enabled()) { - error_report("%s: critical error: calling COLO code withou= t " - "COLO enabled", __func__); - } - migrate_start_colo_process(s); - /* - * Fixme: we will run VM in COLO no matter its old running stat= e. - * After exited COLO, we will keep running. - */ - s->vm_was_running =3D true; + break; + + case MIGRATION_STATUS_ACTIVE: + /* + * We should really assert here, but since it's during + * migration, let's try to reduce the usage of assertions. + */ + if (!migrate_colo_enabled()) { + error_report("%s: critical error: calling COLO code without " + "COLO enabled", __func__); } + migrate_start_colo_process(s); + /* + * Fixme: we will run VM in COLO no matter its old running state. + * After exited COLO, we will keep running. + */ + s->vm_was_running =3D true; + /* Fallthrough */ + case MIGRATION_STATUS_FAILED: + case MIGRATION_STATUS_CANCELLED: if (s->vm_was_running) { vm_start(); } else { @@ -2329,6 +2333,12 @@ static void *migration_thread(void *opaque) runstate_set(RUN_STATE_POSTMIGRATE); } } + break; + + default: + /* Should not reach here, but if so, forgive the VM. */ + error_report("%s: Unknown ending state %d", __func__, s->state); + break; } qemu_bh_schedule(s->cleanup_bh); qemu_mutex_unlock_iothread(); --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982439845803.8007854772247; Wed, 3 Jan 2018 04:27:19 -0800 (PST) Received: from localhost ([::1]:50662 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi8c-0003nf-Vo for importer@patchew.org; Wed, 03 Jan 2018 07:27:19 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56776) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2L-0006rr-8C for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi2J-0002K1-Sn for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:49 -0500 Received: from mx1.redhat.com ([209.132.183.28]:63370) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi2J-0002J4-Iv for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:47 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 74A6BC0AE086 for ; Wed, 3 Jan 2018 12:20:46 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 110D763756; Wed, 3 Jan 2018 12:20:43 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:13 +0800 Message-Id: <20180103122017.14794-10-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Wed, 03 Jan 2018 12:20:46 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 09/13] migration: cleanup stats update into function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We have quite a few lines in migration_thread() that calculates some statistics for the migration interations. Isolate it into a single function to improve readability. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 86 ++++++++++++++++++++++++++++++-----------------= ---- migration/migration.h | 11 +++++++ 2 files changed, 61 insertions(+), 36 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 4dd21f8636..de872801e6 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1273,6 +1273,8 @@ MigrationState *migrate_init(void) s->start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); s->total_time =3D 0; s->vm_was_running =3D false; + s->iteration_initial_bytes =3D 0; + s->threshold_size =3D 0; return s; } =20 @@ -2170,6 +2172,43 @@ static void migration_calculate_complete(MigrationSt= ate *s) } } =20 +static void migration_update_counters(MigrationState *s, + int64_t current_time) +{ + uint64_t transferred, time_spent; + int64_t threshold_size; + double bandwidth; + + if (current_time < s->iteration_start_time + BUFFER_DELAY) { + return; + } + + transferred =3D qemu_ftell(s->to_dst_file) - s->iteration_initial_byte= s; + time_spent =3D current_time - s->iteration_start_time; + bandwidth =3D (double)transferred / time_spent; + threshold_size =3D bandwidth * s->parameters.downtime_limit; + + s->mbps =3D (((double) transferred * 8.0) / + ((double) time_spent / 1000.0)) / 1000.0 / 1000.0; + + /* + * if we haven't sent anything, we don't want to + * recalculate. 10000 is a small enough number for our purposes + */ + if (ram_counters.dirty_pages_rate && transferred > 10000) { + s->expected_downtime =3D ram_counters.dirty_pages_rate * + qemu_target_page_size() / bandwidth; + } + + qemu_file_reset_rate_limit(s->to_dst_file); + + s->iteration_start_time =3D current_time; + s->iteration_initial_bytes =3D qemu_ftell(s->to_dst_file); + + trace_migrate_transferred(transferred, time_spent, + bandwidth, threshold_size); +} + /* * Master migration thread on the source VM. * It drives the migration and pumps the data down the outgoing channel. @@ -2177,22 +2216,15 @@ static void migration_calculate_complete(MigrationS= tate *s) static void *migration_thread(void *opaque) { MigrationState *s =3D opaque; - /* Used by the bandwidth calcs, updated later */ - int64_t initial_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); int64_t setup_start =3D qemu_clock_get_ms(QEMU_CLOCK_HOST); - int64_t initial_bytes =3D 0; - /* - * The final stage happens when the remaining data is smaller than - * this threshold; it's calculated from the requested downtime and - * measured bandwidth - */ - int64_t threshold_size =3D 0; bool entered_postcopy =3D false; /* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */ enum MigrationStatus current_active_state =3D MIGRATION_STATUS_ACTIVE; =20 rcu_register_thread(); =20 + s->iteration_start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + qemu_savevm_state_header(s->to_dst_file); =20 /* @@ -2232,17 +2264,17 @@ static void *migration_thread(void *opaque) if (!qemu_file_rate_limit(s->to_dst_file)) { uint64_t pend_post, pend_nonpost; =20 - qemu_savevm_state_pending(s->to_dst_file, threshold_size, + qemu_savevm_state_pending(s->to_dst_file, s->threshold_size, &pend_nonpost, &pend_post); pending_size =3D pend_nonpost + pend_post; - trace_migrate_pending(pending_size, threshold_size, + trace_migrate_pending(pending_size, s->threshold_size, pend_post, pend_nonpost); - if (pending_size && pending_size >=3D threshold_size) { + if (pending_size && pending_size >=3D s->threshold_size) { /* Still a significant amount to transfer */ =20 if (migrate_postcopy() && s->state !=3D MIGRATION_STATUS_POSTCOPY_ACTIVE && - pend_nonpost <=3D threshold_size && + pend_nonpost <=3D s->threshold_size && atomic_read(&s->start_postcopy)) { =20 if (!postcopy_start(s)) { @@ -2267,33 +2299,15 @@ static void *migration_thread(void *opaque) trace_migration_thread_file_err(); break; } + current_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); - if (current_time >=3D initial_time + BUFFER_DELAY) { - uint64_t transferred_bytes =3D qemu_ftell(s->to_dst_file) - - initial_bytes; - uint64_t time_spent =3D current_time - initial_time; - double bandwidth =3D (double)transferred_bytes / time_spent; - threshold_size =3D bandwidth * s->parameters.downtime_limit; - - s->mbps =3D (((double) transferred_bytes * 8.0) / - ((double) time_spent / 1000.0)) / 1000.0 / 1000.0; - - trace_migrate_transferred(transferred_bytes, time_spent, - bandwidth, threshold_size); - /* if we haven't sent anything, we don't want to recalculate - 10000 is a small enough number for our purposes */ - if (ram_counters.dirty_pages_rate && transferred_bytes > 10000= ) { - s->expected_downtime =3D ram_counters.dirty_pages_rate * - qemu_target_page_size() / bandwidth; - } =20 - qemu_file_reset_rate_limit(s->to_dst_file); - initial_time =3D current_time; - initial_bytes =3D qemu_ftell(s->to_dst_file); - } + migration_update_counters(s, current_time); + if (qemu_file_rate_limit(s->to_dst_file)) { /* usleep expects microseconds */ - g_usleep((initial_time + BUFFER_DELAY - current_time)*1000); + g_usleep((s->iteration_start_time + BUFFER_DELAY - + current_time) * 1000); } } =20 diff --git a/migration/migration.h b/migration/migration.h index 867383f18d..786d971ce2 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -90,6 +90,17 @@ struct MigrationState QEMUBH *cleanup_bh; QEMUFile *to_dst_file; =20 + /* bytes already send at the beggining of current interation */ + uint64_t iteration_initial_bytes; + /* time at the start of current iteration */ + int64_t iteration_start_time; + /* + * The final stage happens when the remaining data is smaller than + * this threshold; it's calculated from the requested downtime and + * measured bandwidth + */ + int64_t threshold_size; + /* params from 'migrate-set-parameters' */ MigrationParameters parameters; =20 --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982569442310.53547493332985; Wed, 3 Jan 2018 04:29:29 -0800 (PST) Received: from localhost ([::1]:50683 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWiAi-0006SG-Hb for importer@patchew.org; Wed, 03 Jan 2018 07:29:28 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56800) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2M-0006sZ-RI for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi2L-0002Mm-On for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:50 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40552) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi2L-0002LO-Gf for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:49 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A977BC0587DF for ; Wed, 3 Jan 2018 12:20:48 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id CD17563756; Wed, 3 Jan 2018 12:20:46 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:14 +0800 Message-Id: <20180103122017.14794-11-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 03 Jan 2018 12:20:48 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 10/13] migration: major cleanup for migrate iterations X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The major work for migration iterations are to move RAM/block/... data via qemu_savevm_state_iterate(). Generalize those part into a single function. Reviewed-by: Juan Quintela Signed-off-by: Peter Xu --- migration/migration.c | 90 +++++++++++++++++++++++++++++++----------------= ---- 1 file changed, 55 insertions(+), 35 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index de872801e6..2b42d6c9a1 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2056,11 +2056,11 @@ static int migration_maybe_pause(MigrationState *s, * The caller 'breaks' the loop when this returns. * * @s: Current migration state - * @current_active_state: The migration state we expect to be in */ -static void migration_completion(MigrationState *s, int current_active_sta= te) +static void migration_completion(MigrationState *s) { int ret; + int current_active_state =3D s->state; =20 if (s->state =3D=3D MIGRATION_STATUS_ACTIVE) { qemu_mutex_lock_iothread(); @@ -2209,6 +2209,51 @@ static void migration_update_counters(MigrationState= *s, bandwidth, threshold_size); } =20 +/* Migration thread iteration status */ +typedef enum { + MIG_ITERATE_RESUME, /* Resume current iteration */ + MIG_ITERATE_SKIP, /* Skip current iteration */ + MIG_ITERATE_BREAK, /* Break the loop */ +} MigIterateState; + +/* + * Return true if continue to the next iteration directly, false + * otherwise. + */ +static MigIterateState migration_iteration_run(MigrationState *s) +{ + uint64_t pending_size, pend_post, pend_nonpost; + bool in_postcopy =3D s->state =3D=3D MIGRATION_STATUS_POSTCOPY_ACTIVE; + + qemu_savevm_state_pending(s->to_dst_file, s->threshold_size, + &pend_nonpost, &pend_post); + pending_size =3D pend_nonpost + pend_post; + + trace_migrate_pending(pending_size, s->threshold_size, + pend_post, pend_nonpost); + + if (pending_size && pending_size >=3D s->threshold_size) { + /* Still a significant amount to transfer */ + if (migrate_postcopy() && !in_postcopy && + pend_nonpost <=3D s->threshold_size && + atomic_read(&s->start_postcopy)) { + if (postcopy_start(s)) { + error_report("%s: postcopy failed to start", __func__); + } + return MIG_ITERATE_SKIP; + } + /* Just another iteration step */ + qemu_savevm_state_iterate(s->to_dst_file, + s->state =3D=3D MIGRATION_STATUS_POSTCOPY_ACTIVE); + } else { + trace_migration_thread_low_pending(pending_size); + migration_completion(s); + return MIG_ITERATE_BREAK; + } + + return MIG_ITERATE_RESUME; +} + /* * Master migration thread on the source VM. * It drives the migration and pumps the data down the outgoing channel. @@ -2217,9 +2262,6 @@ static void *migration_thread(void *opaque) { MigrationState *s =3D opaque; int64_t setup_start =3D qemu_clock_get_ms(QEMU_CLOCK_HOST); - bool entered_postcopy =3D false; - /* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */ - enum MigrationStatus current_active_state =3D MIGRATION_STATUS_ACTIVE; =20 rcu_register_thread(); =20 @@ -2259,43 +2301,21 @@ static void *migration_thread(void *opaque) while (s->state =3D=3D MIGRATION_STATUS_ACTIVE || s->state =3D=3D MIGRATION_STATUS_POSTCOPY_ACTIVE) { int64_t current_time; - uint64_t pending_size; =20 if (!qemu_file_rate_limit(s->to_dst_file)) { - uint64_t pend_post, pend_nonpost; - - qemu_savevm_state_pending(s->to_dst_file, s->threshold_size, - &pend_nonpost, &pend_post); - pending_size =3D pend_nonpost + pend_post; - trace_migrate_pending(pending_size, s->threshold_size, - pend_post, pend_nonpost); - if (pending_size && pending_size >=3D s->threshold_size) { - /* Still a significant amount to transfer */ - - if (migrate_postcopy() && - s->state !=3D MIGRATION_STATUS_POSTCOPY_ACTIVE && - pend_nonpost <=3D s->threshold_size && - atomic_read(&s->start_postcopy)) { - - if (!postcopy_start(s)) { - current_active_state =3D MIGRATION_STATUS_POSTCOPY= _ACTIVE; - entered_postcopy =3D true; - } - - continue; - } - /* Just another iteration step */ - qemu_savevm_state_iterate(s->to_dst_file, entered_postcopy= ); - } else { - trace_migration_thread_low_pending(pending_size); - migration_completion(s, current_active_state); + MigIterateState iter_state =3D migration_iteration_run(s); + if (iter_state =3D=3D MIG_ITERATE_SKIP) { + continue; + } else if (iter_state =3D=3D MIG_ITERATE_BREAK) { break; } } =20 if (qemu_file_get_error(s->to_dst_file)) { - migrate_set_state(&s->state, current_active_state, - MIGRATION_STATUS_FAILED); + if (migration_is_setup_or_active(s->state)) { + migrate_set_state(&s->state, s->state, + MIGRATION_STATUS_FAILED); + } trace_migration_thread_file_err(); break; } --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982698513184.36398546928945; Wed, 3 Jan 2018 04:31:38 -0800 (PST) Received: from localhost ([::1]:50752 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWiCk-0008Al-M7 for importer@patchew.org; Wed, 03 Jan 2018 07:31:34 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56842) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2P-0006vF-2e for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi2O-0002PU-0t for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:53 -0500 Received: from mx1.redhat.com ([209.132.183.28]:59398) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi2N-0002OP-Ni for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:51 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E9B7B49007 for ; Wed, 3 Jan 2018 12:20:50 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2580D63756; Wed, 3 Jan 2018 12:20:48 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:15 +0800 Message-Id: <20180103122017.14794-12-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 03 Jan 2018 12:20:50 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 11/13] migration: put the finish part into a new function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch only moved the last part of migration_thread() into a new function migration_iteration_finish() to make it much shorter. With previous works to remove some local variables, now it's fairly easy to do that. Reviewed-by: Juan Quintela Signed-off-by: Peter Xu --- migration/migration.c | 94 +++++++++++++++++++++++++++--------------------= ---- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 2b42d6c9a1..16eb24c8b3 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2254,6 +2254,54 @@ static MigIterateState migration_iteration_run(Migra= tionState *s) return MIG_ITERATE_RESUME; } =20 +static void migration_iteration_finish(MigrationState *s) +{ + /* If we enabled cpu throttling for auto-converge, turn it off. */ + cpu_throttle_stop(); + + qemu_mutex_lock_iothread(); + switch (s->state) { + case MIGRATION_STATUS_COMPLETED: + migration_calculate_complete(s); + runstate_set(RUN_STATE_POSTMIGRATE); + break; + + case MIGRATION_STATUS_ACTIVE: + /* + * We should really assert here, but since it's during + * migration, let's try to reduce the usage of assertions. + */ + if (!migrate_colo_enabled()) { + error_report("%s: critical error: calling COLO code without " + "COLO enabled", __func__); + } + migrate_start_colo_process(s); + /* + * Fixme: we will run VM in COLO no matter its old running state. + * After exited COLO, we will keep running. + */ + s->vm_was_running =3D true; + /* Fallthrough */ + case MIGRATION_STATUS_FAILED: + case MIGRATION_STATUS_CANCELLED: + if (s->vm_was_running) { + vm_start(); + } else { + if (runstate_check(RUN_STATE_FINISH_MIGRATE)) { + runstate_set(RUN_STATE_POSTMIGRATE); + } + } + break; + + default: + /* Should not reach here, but if so, forgive the VM. */ + error_report("%s: Unknown ending state %d", __func__, s->state); + break; + } + qemu_bh_schedule(s->cleanup_bh); + qemu_mutex_unlock_iothread(); +} + /* * Master migration thread on the source VM. * It drives the migration and pumps the data down the outgoing channel. @@ -2332,51 +2380,7 @@ static void *migration_thread(void *opaque) } =20 trace_migration_thread_after_loop(); - /* If we enabled cpu throttling for auto-converge, turn it off. */ - cpu_throttle_stop(); - - qemu_mutex_lock_iothread(); - switch (s->state) { - case MIGRATION_STATUS_COMPLETED: - migration_calculate_complete(s); - runstate_set(RUN_STATE_POSTMIGRATE); - break; - - case MIGRATION_STATUS_ACTIVE: - /* - * We should really assert here, but since it's during - * migration, let's try to reduce the usage of assertions. - */ - if (!migrate_colo_enabled()) { - error_report("%s: critical error: calling COLO code without " - "COLO enabled", __func__); - } - migrate_start_colo_process(s); - /* - * Fixme: we will run VM in COLO no matter its old running state. - * After exited COLO, we will keep running. - */ - s->vm_was_running =3D true; - /* Fallthrough */ - case MIGRATION_STATUS_FAILED: - case MIGRATION_STATUS_CANCELLED: - if (s->vm_was_running) { - vm_start(); - } else { - if (runstate_check(RUN_STATE_FINISH_MIGRATE)) { - runstate_set(RUN_STATE_POSTMIGRATE); - } - } - break; - - default: - /* Should not reach here, but if so, forgive the VM. */ - error_report("%s: Unknown ending state %d", __func__, s->state); - break; - } - qemu_bh_schedule(s->cleanup_bh); - qemu_mutex_unlock_iothread(); - + migration_iteration_finish(s); rcu_unregister_thread(); return NULL; } --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982433732747.3760871103251; Wed, 3 Jan 2018 04:27:13 -0800 (PST) Received: from localhost ([::1]:50659 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi8W-0003gy-SZ for importer@patchew.org; Wed, 03 Jan 2018 07:27:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56880) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2S-00070a-AQ for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi2Q-0002S2-5I for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:56 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49062) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi2P-0002R8-Ul for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:54 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2B5B261B8F for ; Wed, 3 Jan 2018 12:20:53 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 64DFB63763; Wed, 3 Jan 2018 12:20:51 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:16 +0800 Message-Id: <20180103122017.14794-13-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 03 Jan 2018 12:20:53 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 12/13] migration: remove some block_cleanup_parameters() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Keep the one in migrate_fd_cancel() would be enough. Removing the other two. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 16eb24c8b3..fbb41b8887 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1130,7 +1130,6 @@ void migrate_fd_error(MigrationState *s, const Error = *error) MIGRATION_STATUS_FAILED); migrate_set_error(s, error); notifier_list_notify(&migration_state_notifiers, s); - block_cleanup_parameters(s); } =20 static void migrate_fd_cancel(MigrationState *s) @@ -1176,7 +1175,6 @@ static void migrate_fd_cancel(MigrationState *s) s->block_inactive =3D false; } } - block_cleanup_parameters(s); } =20 void add_migration_state_change_notifier(Notifier *notify) --=20 2.14.3 From nobody Tue Oct 28 01:55:53 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1514982561692377.79807018879603; Wed, 3 Jan 2018 04:29:21 -0800 (PST) Received: from localhost ([::1]:50680 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWiAa-0006K8-M9 for importer@patchew.org; Wed, 03 Jan 2018 07:29:20 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56907) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWi2T-00071w-Gc for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:21:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWi2S-0002VO-M6 for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:57 -0500 Received: from mx1.redhat.com ([209.132.183.28]:52824) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eWi2S-0002UC-Fr for qemu-devel@nongnu.org; Wed, 03 Jan 2018 07:20:56 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AE331629 for ; Wed, 3 Jan 2018 12:20:55 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-131.nay.redhat.com [10.66.14.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id 998F663756; Wed, 3 Jan 2018 12:20:53 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Wed, 3 Jan 2018 20:20:17 +0800 Message-Id: <20180103122017.14794-14-peterx@redhat.com> In-Reply-To: <20180103122017.14794-1-peterx@redhat.com> References: <20180103122017.14794-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 03 Jan 2018 12:20:55 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 13/13] migration: remove notify in fd_error X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It should be called in migrate_fd_cleanup too. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/migration.c | 1 - 1 file changed, 1 deletion(-) diff --git a/migration/migration.c b/migration/migration.c index fbb41b8887..c671f0a662 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1129,7 +1129,6 @@ void migrate_fd_error(MigrationState *s, const Error = *error) migrate_set_state(&s->state, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_FAILED); migrate_set_error(s, error); - notifier_list_notify(&migration_state_notifiers, s); } =20 static void migrate_fd_cancel(MigrationState *s) --=20 2.14.3