[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 18/18] migration: Make dirty_bytes_last_sync atomic
From: |
Juan Quintela |
Subject: |
[PULL 18/18] migration: Make dirty_bytes_last_sync atomic |
Date: |
Thu, 27 Apr 2023 17:22:34 +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>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
I am open to use ram_bytes_remaining() in its only use and be more
"optimistic" about the downtime.
Don't use __nocheck() functions.
Use stat64_get() now that it exists.
---
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 9367bb2afc..abcadbb619 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2692,7 +2692,8 @@ static void migration_update_counters(MigrationState *s,
*/
if (stat64_get(&ram_counters.dirty_pages_rate) &&
transferred > 10000) {
- s->expected_downtime = ram_counters.remaining / bandwidth;
+ s->expected_downtime =
+ stat64_get(&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 5846f6e27f..89be3e3320 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1224,7 +1224,7 @@ static void migration_bitmap_sync(RAMState *rs)
RAMBLOCK_FOREACH_NOT_IGNORED(block) {
ramblock_sync_dirty_bitmap(rs, block);
}
- ram_counters.remaining = ram_bytes_remaining();
+ stat64_set(&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 f189cc79f8..04b05e1b2c 100644
--- a/migration/ram.h
+++ b/migration/ram.h
@@ -41,6 +41,7 @@
* one thread).
*/
typedef struct {
+ Stat64 dirty_bytes_last_sync;
Stat64 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.40.0
- [PULL 00/18] Migration 20230427 patches, Juan Quintela, 2023/04/27
- [PULL 04/18] migration: Create migrate_downtime_limit() function, Juan Quintela, 2023/04/27
- [PULL 10/18] migration: Create migrate_tls_hostname() function, Juan Quintela, 2023/04/27
- [PULL 06/18] migration: Move block_cleanup_parameters() to options.c, Juan Quintela, 2023/04/27
- [PULL 01/18] multifd: Fix the number of channels ready, Juan Quintela, 2023/04/27
- [PULL 17/18] migration: Make dirty_pages_rate atomic, Juan Quintela, 2023/04/27
- [PULL 14/18] multifd: Protect multifd_send_sync_main() calls, Juan Quintela, 2023/04/27
- [PULL 13/18] multifd: Create property multifd-flush-after-each-section, Juan Quintela, 2023/04/27
- [PULL 16/18] stat64: Add stat64_set() operation, Juan Quintela, 2023/04/27
- [PULL 18/18] migration: Make dirty_bytes_last_sync atomic,
Juan Quintela <=
- [PULL 05/18] migration: Move migrate_set_block_incremental() to options.c, Juan Quintela, 2023/04/27
- [PULL 07/18] migration: Remove MigrationState from block_cleanup_parameters(), Juan Quintela, 2023/04/27
- [PULL 15/18] multifd: Only flush once each full round of memory, Juan Quintela, 2023/04/27
- [PULL 11/18] migration: Create migrate_block_bitmap_mapping() function, Juan Quintela, 2023/04/27
- [PULL 09/18] migration: Create migrate_tls_authz() function, Juan Quintela, 2023/04/27
- [PULL 08/18] migration: Create migrate_tls_creds() function, Juan Quintela, 2023/04/27
- [PULL 02/18] migration: Create migrate_params_init() function, Juan Quintela, 2023/04/27
- [PULL 12/18] migration: Move migration_properties to options.c, Juan Quintela, 2023/04/27
- [PULL 03/18] migration: Make all functions check have the same format, Juan Quintela, 2023/04/27
- Re: [PULL 00/18] Migration 20230427 patches, Richard Henderson, 2023/04/28