From nobody Sat May 11 22:04:40 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1682539875; cv=none; d=zohomail.com; s=zohoarc; b=FKGOsdPz0nYJimI8DD6H7uRNJOVpB2yTE2USkk6EjOkXgksY/LZIZfN7tZGkg0mAYLMyE9tRAEvNKNSqwss72BWNLCzEOXdYQiUc8vfHmDlk8WxsEIpLKQ3yxHXprmYi7uwgLhv0grkvakfiUrpGMi2LTtT6PaNRL+AViuMiLEM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682539875; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=jPHyCSjLtpWEDLa4l0TzlJ/JeARyRn2lQmHerQQ6Z6E=; b=URq2a3sL0ffM4iNWGMSC4aNQGl1rUQLA/phz0Ab3d6HtvEKDGNpnMpDtwabBGTYu1ylLUdHoTB3GBi6eq+j4AvN0fp+8+psWriMJ7QUa+EwNHvAuStQavMPRMy2Hr8h/Ss4obEyLaD4viWtOt+B8m8ECIKVN7GyITGrXAM4/xSY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1682539875663748.8494247896558; Wed, 26 Apr 2023 13:11:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1prlSz-0003Ze-QL; Wed, 26 Apr 2023 16:10:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prlSy-0003ZW-Dm for qemu-devel@nongnu.org; Wed, 26 Apr 2023 16:10:16 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prlSu-00051C-UJ for qemu-devel@nongnu.org; Wed, 26 Apr 2023 16:10:16 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-127-4-29lNvFMeuOaE_u9aUdEg-1; Wed, 26 Apr 2023 16:10:06 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1EE5CA0F380; Wed, 26 Apr 2023 20:10:05 +0000 (UTC) Received: from secure.mitica (unknown [10.39.193.238]) by smtp.corp.redhat.com (Postfix) with ESMTP id 366802166B41; Wed, 26 Apr 2023 20:10:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1682539812; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jPHyCSjLtpWEDLa4l0TzlJ/JeARyRn2lQmHerQQ6Z6E=; b=BW/vZucJ70GelL2+8Cj6RsTf1K3hkFazhkl+zvwnIQLKNaMS50fpsKPToVRoRvXfHuopTo jYLNSuMjqo8qyPI+G3B4Zo+ETXZgsEJ1ouh0RSSz6Kxi/+iiBRnbVvepwzDBXrRunlrxQd 9cfOB8QUQ9dvoyB5EAi+UgVAbqZKGFk= X-MC-Unique: 4-29lNvFMeuOaE_u9aUdEg-1 From: Juan Quintela To: qemu-devel@nongnu.org Cc: Juan Quintela , Peter Xu , Leonardo Bras , Richard Henderson Subject: [PATCH v5 1/2] migration: Make dirty_pages_rate atomic Date: Wed, 26 Apr 2023 22:10:01 +0200 Message-Id: <20230426201002.15414-2-quintela@redhat.com> In-Reply-To: <20230426201002.15414-1-quintela@redhat.com> References: <20230426201002.15414-1-quintela@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=quintela@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.171, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1682539876106100002 Content-Type: text/plain; charset="utf-8" In this case we use qatomic operations instead of Stat64 wrapper because there is no stat64_set(). Defining the 64 bit wrapper is trivial. The one without atomics is more interesting. Signed-off-by: Juan Quintela Reviewed-by: Peter Xu --- Don't use __nocheck() variants --- migration/migration.c | 6 ++++-- migration/ram.c | 5 +++-- migration/ram.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 22e8586623..712f802962 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1005,7 +1005,8 @@ static void populate_ram_info(MigrationInfo *info, Mi= grationState *s) =20 if (s->state !=3D MIGRATION_STATUS_COMPLETED) { info->ram->remaining =3D ram_bytes_remaining(); - info->ram->dirty_pages_rate =3D ram_counters.dirty_pages_rate; + info->ram->dirty_pages_rate =3D + qatomic_read(&ram_counters.dirty_pages_rate); } } =20 @@ -2751,7 +2752,8 @@ static void migration_update_counters(MigrationState = *s, * 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) { + if (qatomic_read(&ram_counters.dirty_pages_rate) && + transferred > 10000) { s->expected_downtime =3D ram_counters.remaining / bandwidth; } =20 diff --git a/migration/ram.c b/migration/ram.c index 01356f60a4..7c534a41e0 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1129,8 +1129,9 @@ static void migration_update_rates(RAMState *rs, int6= 4_t end_time) double compressed_size; =20 /* calculate period counters */ - ram_counters.dirty_pages_rate =3D rs->num_dirty_pages_period * 1000 - / (end_time - rs->time_last_bitmap_sync); + qatomic_set(&ram_counters.dirty_pages_rate, + rs->num_dirty_pages_period * 1000 / + (end_time - rs->time_last_bitmap_sync)); =20 if (!page_count) { return; diff --git a/migration/ram.h b/migration/ram.h index a6e0d70226..3db0a9d65c 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -41,7 +41,7 @@ * one thread). */ typedef struct { - int64_t dirty_pages_rate; + aligned_uint64_t dirty_pages_rate; Stat64 dirty_sync_count; Stat64 dirty_sync_missed_zero_copy; Stat64 downtime_bytes; --=20 2.40.0 From nobody Sat May 11 22:04:40 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1682539875; cv=none; d=zohomail.com; s=zohoarc; b=NkQK0TqjC64NuY/BXMmzvXCVgpnvcTPgXspAcQTqdFa0K3JkRvDOBOFNoBahQzpqbEx3ZqqM/ugwlqMur71zflDyb2T20ilF91gi0Kjz9x17NOedqkkUHwWlqAY/N8bh7MVrLuVJ1gr43gFCcsNEaxO0vQ+3AfQkgisgaOPZLU0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1682539875; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=UKv9qPP1abQ4oDyWPLUI7DII4wc+W+bRFJjvO0rV4wo=; b=C9ytJQiVZtWpWC1Np/Aj6QBoSi3bKK4viStYpwf4HH4mYv5qNpsDe57wnhuHDX1/QCmAt+2/b0pjmY9GMxLzKzCVBcYPkSVRBkXHtMENCuosnV5k03VRSh2XmSI9tfiSenOHgqJ9mOD+bcDAvaNL1R9DCqJPa4nom7LdXv2ykKs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1682539875696966.4462035318309; Wed, 26 Apr 2023 13:11:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1prlSu-0003Yu-Mf; Wed, 26 Apr 2023 16:10:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prlSt-0003Yj-HZ for qemu-devel@nongnu.org; Wed, 26 Apr 2023 16:10:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prlSr-00050W-UM for qemu-devel@nongnu.org; Wed, 26 Apr 2023 16:10:11 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-237-00RBeTAINWelFldd8QGAQA-1; Wed, 26 Apr 2023 16:10:06 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6E75F858297; Wed, 26 Apr 2023 20:10:06 +0000 (UTC) Received: from secure.mitica (unknown [10.39.193.238]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6162D2166B41; Wed, 26 Apr 2023 20:10:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1682539809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UKv9qPP1abQ4oDyWPLUI7DII4wc+W+bRFJjvO0rV4wo=; b=J+r/EorPWF5fBlPbETDomKVchErPzqZLPCNshLsxZzdv3iO60Pemy51iSWK70VFtmDjBUd goaN9PXjzxGSSprHCrcL0kOp4W/eNU0n6vduo3qNsaVc3nh1AVzDx53Uz7aYSrWbNgLefS kZsXIvRV1yyGdWlMDWmH28fVKBjUWEY= X-MC-Unique: 00RBeTAINWelFldd8QGAQA-1 From: Juan Quintela To: qemu-devel@nongnu.org Cc: Juan Quintela , Peter Xu , Leonardo Bras , Richard Henderson Subject: [PATCH v5 2/2] migration: Make dirty_bytes_last_sync atomic Date: Wed, 26 Apr 2023 22:10:02 +0200 Message-Id: <20230426201002.15414-3-quintela@redhat.com> In-Reply-To: <20230426201002.15414-1-quintela@redhat.com> References: <20230426201002.15414-1-quintela@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=quintela@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.171, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1682539877540100009 Content-Type: text/plain; charset="utf-8" As we set its value, it needs to be operated with atomics. We rename it from remaining to better reflect its meaning. Statistics always return the real reamaining bytes. This was used to store how much pages where dirty on the previous generation, so we can calculate the expected downtime as: dirty_bytes_last_sync / current_bandwith. If we use the actual remaining bytes, we would see a very small value at the end of the iteration. Signed-off-by: Juan Quintela Reviewed-by: Peter Xu --- I am open to use ram_bytes_remaining() in its only use and be more "optimistic" about the downtime. Don't use __nocheck() functions. --- migration/migration.c | 3 ++- migration/ram.c | 2 +- migration/ram.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 712f802962..c81c65bf28 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2754,7 +2754,8 @@ static void migration_update_counters(MigrationState = *s, */ if (qatomic_read(&ram_counters.dirty_pages_rate) && transferred > 10000) { - s->expected_downtime =3D ram_counters.remaining / bandwidth; + s->expected_downtime =3D + qatomic_read(&ram_counters.dirty_bytes_last_sync) / bandwidth; } =20 qemu_file_reset_rate_limit(s->to_dst_file); diff --git a/migration/ram.c b/migration/ram.c index 7c534a41e0..704df661d1 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1223,7 +1223,7 @@ static void migration_bitmap_sync(RAMState *rs) RAMBLOCK_FOREACH_NOT_IGNORED(block) { ramblock_sync_dirty_bitmap(rs, block); } - ram_counters.remaining =3D ram_bytes_remaining(); + qatomic_set(&ram_counters.dirty_bytes_last_sync, ram_bytes_remaini= ng()); } qemu_mutex_unlock(&rs->bitmap_mutex); =20 diff --git a/migration/ram.h b/migration/ram.h index 3db0a9d65c..11a0fde99b 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -41,6 +41,7 @@ * one thread). */ typedef struct { + aligned_uint64_t dirty_bytes_last_sync; aligned_uint64_t dirty_pages_rate; Stat64 dirty_sync_count; Stat64 dirty_sync_missed_zero_copy; @@ -51,7 +52,6 @@ typedef struct { Stat64 postcopy_bytes; Stat64 postcopy_requests; Stat64 precopy_bytes; - int64_t remaining; Stat64 transferred; } RAMStats; =20 --=20 2.40.0