Message ID | 20230427095250.22350-4-quintela@redhat.com |
---|---|
State | New |
Headers | show |
Series | Migration: Make more ram_counters atomic | expand |
On 4/27/23 10:52, Juan Quintela wrote: > 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. > > 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(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/migration/migration.c b/migration/migration.c index 900dfb6855..cc09a88aac 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2754,7 +2754,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 fa94c99766..fcdcf78ec7 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 = 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;