[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/20] migration: Make dirty_bytes_last_sync atomic
From: |
Juan Quintela |
Subject: |
[PULL 12/20] migration: Make dirty_bytes_last_sync atomic |
Date: |
Thu, 20 Apr 2023 15:17:43 +0200 |
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>
Reviewed-by: Peter Xu <peterx@redhat.com>
---
I am open to use ram_bytes_remaining() in its only use and be more
"optimistic" about the downtime.
---
migration/migration.c | 4 +++-
migration/ram.c | 3 ++-
migration/ram.h | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
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 7400abf5e1..7bbaf8cd86 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);
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;
--
2.39.2
- [PULL 00/20] Migration 20230420 patches, Juan Quintela, 2023/04/20
- [PULL 01/20] migration: remove extra whitespace character for code style, Juan Quintela, 2023/04/20
- [PULL 09/20] migration: Make dirty_sync_count atomic, Juan Quintela, 2023/04/20
- [PULL 12/20] migration: Make dirty_bytes_last_sync atomic,
Juan Quintela <=
- [PULL 06/20] migration: Make dirty_sync_missed_zero_copy atomic, Juan Quintela, 2023/04/20
- [PULL 11/20] migration: Make dirty_pages_rate atomic, Juan Quintela, 2023/04/20
- [PULL 04/20] migration: Update atomic stats out of the mutex, Juan Quintela, 2023/04/20
- [PULL 03/20] migration: Merge ram_counters and ram_atomic_counters, Juan Quintela, 2023/04/20
- [PULL 05/20] migration: Make multifd_bytes atomic, Juan Quintela, 2023/04/20
- [PULL 07/20] migration: Make precopy_bytes atomic, Juan Quintela, 2023/04/20
- [PULL 13/20] migration: Rename duplicate to zero_pages, Juan Quintela, 2023/04/20
- [PULL 08/20] migration: Make downtime_bytes atomic, Juan Quintela, 2023/04/20
- [PULL 16/20] util/mmap-alloc: qemu_fd_getfs(), Juan Quintela, 2023/04/20
- [PULL 17/20] vl.c: Create late backends before migration object, Juan Quintela, 2023/04/20