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;