From 72f8e58707395d24c177ffa9f88a25329638fc98 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Tue, 11 Apr 2023 18:19:05 +0200 Subject: [PATCH] migration: Make dirty_pages_rate atomic Signed-off-by: Juan Quintela Reviewed-by: Richard Henderson Reviewed-by: Peter Xu --- Don't use __nocheck() variants Use stat64_get() --- migration/migration.c | 6 ++++-- migration/ram.c | 5 +++-- migration/ram.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 3adcdfe286..9367bb2afc 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -958,7 +958,8 @@ static void populate_ram_info(MigrationInfo *info, MigrationState *s) if (s->state != MIGRATION_STATUS_COMPLETED) { info->ram->remaining = ram_bytes_remaining(); - info->ram->dirty_pages_rate = ram_counters.dirty_pages_rate; + info->ram->dirty_pages_rate = + stat64_get(&ram_counters.dirty_pages_rate); } } @@ -2689,7 +2690,8 @@ static void migration_update_counters(MigrationState *s, * if we haven't sent anything, we don't want to * recalculate. 10000 is a small enough number for our purposes */ - if (ram_counters.dirty_pages_rate && transferred > 10000) { + if (stat64_get(&ram_counters.dirty_pages_rate) && + transferred > 10000) { s->expected_downtime = ram_counters.remaining / bandwidth; } diff --git a/migration/ram.c b/migration/ram.c index e9dcda8b9d..5846f6e27f 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1130,8 +1130,9 @@ static void migration_update_rates(RAMState *rs, int64_t end_time) double compressed_size; /* calculate period counters */ - ram_counters.dirty_pages_rate = rs->num_dirty_pages_period * 1000 - / (end_time - rs->time_last_bitmap_sync); + stat64_set(&ram_counters.dirty_pages_rate, + rs->num_dirty_pages_period * 1000 / + (end_time - rs->time_last_bitmap_sync)); if (!page_count) { return; diff --git a/migration/ram.h b/migration/ram.h index a6e0d70226..f189cc79f8 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -41,7 +41,7 @@ * one thread). */ typedef struct { - int64_t dirty_pages_rate; + Stat64 dirty_pages_rate; Stat64 dirty_sync_count; Stat64 dirty_sync_missed_zero_copy; Stat64 downtime_bytes;