From: Juan Quintela <quintela@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Xu <peterx@redhat.com>, Juan Quintela <quintela@redhat.com>,
Leonardo Bras <leobras@redhat.com>
Subject: [PATCH v3 10/12] migration: Make dirty_bytes_last_sync atomic
Date: Wed, 19 Apr 2023 18:24:13 +0200 [thread overview]
Message-ID: <20230419162415.16260-11-quintela@redhat.com> (raw)
In-Reply-To: <20230419162415.16260-1-quintela@redhat.com>
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 <quintela@redhat.com>
---
I am open to use ram_bytes_remaining() in its only use and be more
"optimistic" about the downtime.
---
migration/ram.h | 2 +-
migration/migration.c | 4 +++-
migration/ram.c | 3 ++-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/migration/ram.h b/migration/ram.h
index 574a604b72..8093ebc210 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;
diff --git a/migration/migration.c b/migration/migration.c
index 50eae2fbcd..83d3bfbf62 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -3847,7 +3847,9 @@ static void migration_update_counters(MigrationState *s,
*/
if (qatomic_read__nocheck(&ram_counters.dirty_pages_rate) &&
transferred > 10000) {
- s->expected_downtime = ram_counters.remaining / bandwidth;
+ s->expected_downtime =
+ qatomic_read__nocheck(&ram_counters.dirty_bytes_last_sync) /
+ bandwidth;
}
qemu_file_reset_rate_limit(s->to_dst_file);
diff --git a/migration/ram.c b/migration/ram.c
index 55fabec1fe..771596d377 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1224,7 +1224,8 @@ static void migration_bitmap_sync(RAMState *rs)
RAMBLOCK_FOREACH_NOT_IGNORED(block) {
ramblock_sync_dirty_bitmap(rs, block);
}
- ram_counters.remaining = ram_bytes_remaining();
+ qatomic_set__nocheck(&ram_counters.dirty_bytes_last_sync,
+ ram_bytes_remaining());
}
qemu_mutex_unlock(&rs->bitmap_mutex);
--
2.39.2
next prev parent reply other threads:[~2023-04-19 16:25 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-19 16:24 [PATCH v3 00/12] Migration: Make more ram_counters atomic Juan Quintela
2023-04-19 16:24 ` [PATCH v3 01/12] migration: Merge ram_counters and ram_atomic_counters Juan Quintela
2023-04-19 16:24 ` [PATCH v3 02/12] migration: Update atomic stats out of the mutex Juan Quintela
2023-04-19 16:24 ` [PATCH v3 03/12] migration: Make multifd_bytes atomic Juan Quintela
2023-04-19 16:24 ` [PATCH v3 04/12] migration: Make dirty_sync_missed_zero_copy atomic Juan Quintela
2023-04-19 16:24 ` [PATCH v3 05/12] migration: Make precopy_bytes atomic Juan Quintela
2023-04-19 16:24 ` [PATCH v3 06/12] migration: Make downtime_bytes atomic Juan Quintela
2023-04-19 16:24 ` [PATCH v3 07/12] migration: Make dirty_sync_count atomic Juan Quintela
2023-04-19 16:24 ` [PATCH v3 08/12] migration: Make postcopy_requests atomic Juan Quintela
2023-04-19 16:24 ` [PATCH v3 09/12] migration: Make dirty_pages_rate atomic Juan Quintela
2023-04-19 16:24 ` Juan Quintela [this message]
2023-04-19 16:24 ` [PATCH v3 11/12] migration: Rename duplicate to zero_pages Juan Quintela
2023-04-19 16:24 ` [PATCH v3 12/12] migration: Rename normal to full_pages Juan Quintela
2023-04-19 19:29 ` [PATCH v3 00/12] Migration: Make more ram_counters atomic Peter Xu
2023-04-19 19:54 ` Juan Quintela
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230419162415.16260-11-quintela@redhat.com \
--to=quintela@redhat.com \
--cc=leobras@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).