From 00d94f3f7648bc3d7126bc6b84d42e22194d9230 Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Thu, 28 Jun 2012 19:51:17 +0200 Subject: [PATCH] ram: iterate phase We only need to synchronize the bitmap when the number of dirty pages is low. Not every time that we call the function. Signed-off-by: Juan Quintela --- arch_init.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch_init.c b/arch_init.c index 3c38a52168..b08c615dfd 100644 --- a/arch_init.c +++ b/arch_init.c @@ -348,8 +348,6 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) int i; uint64_t expected_time; - memory_global_sync_dirty_bitmap(get_system_memory()); - bytes_transferred_last = bytes_transferred; bwidth = qemu_get_clock_ns(rt_clock); @@ -398,7 +396,13 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) DPRINTF("ram_save_live: expected(" PRIu64 ") <= max(" PRIu64 ")?\n", expected_time, migrate_max_downtime()); - return expected_time <= migrate_max_downtime(); + if (expected_time <= migrate_max_downtime()) { + memory_global_sync_dirty_bitmap(get_system_memory()); + expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth; + + return expected_time <= migrate_max_downtime(); + } + return 0; } static int ram_save_complete(QEMUFile *f, void *opaque)