From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1M6v54-0000ae-MZ for qemu-devel@nongnu.org; Wed, 20 May 2009 19:20:14 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1M6v4z-0000YE-44 for qemu-devel@nongnu.org; Wed, 20 May 2009 19:20:13 -0400 Received: from [199.232.76.173] (port=59175 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1M6v4y-0000YB-Ua for qemu-devel@nongnu.org; Wed, 20 May 2009 19:20:08 -0400 Received: from mx2.redhat.com ([66.187.237.31]:37773) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1M6v4y-0006t0-H3 for qemu-devel@nongnu.org; Wed, 20 May 2009 19:20:08 -0400 From: Glauber Costa Date: Wed, 20 May 2009 19:20:05 -0400 Message-Id: <1242861605-12844-1-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH] augment info migrate with page status List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com This patch augments info migrate output with status about: * pages remaining * pages transferred This should be enough for management tools to realize whether or not there is progress in migration. We can add more information later on, if the need arrives Signed-off-by: Glauber Costa --- migration.c | 2 ++ sysemu.h | 6 ++++++ vl.c | 13 +++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/migration.c b/migration.c index b9e3368..88d63c0 100644 --- a/migration.c +++ b/migration.c @@ -116,6 +116,8 @@ void do_info_migrate(Monitor *mon) switch (s->get_status(s)) { case MIG_STATE_ACTIVE: monitor_printf(mon, "active\n"); + monitor_printf(mon, "remaining ram pages: %u\n", ram_save_remaining()); + monitor_printf(mon, "transferred ram pages: %u\n", ram_save_transferred()); break; case MIG_STATE_COMPLETED: monitor_printf(mon, "completed\n"); diff --git a/sysemu.h b/sysemu.h index 7d65804..76ab84b 100644 --- a/sysemu.h +++ b/sysemu.h @@ -28,6 +28,12 @@ void qemu_del_vm_change_state_handler(VMChangeStateEntry *e); void vm_start(void); void vm_stop(int reason); +#ifdef NEED_CPU_H +#include "cpu-defs.h" +ram_addr_t ram_save_remaining(void); +ram_addr_t ram_save_transferred(void); +#endif + int64_t cpu_get_ticks(void); void cpu_enable_ticks(void); void cpu_disable_ticks(void); diff --git a/vl.c b/vl.c index 9f25cd4..97a1bc6 100644 --- a/vl.c +++ b/vl.c @@ -3236,8 +3236,9 @@ static int ram_save_block(QEMUFile *f) } static ram_addr_t ram_save_threshold = 10; +static ram_addr_t pages_transferred = 0; -static ram_addr_t ram_save_remaining(void) +ram_addr_t ram_save_remaining(void) { ram_addr_t addr; ram_addr_t count = 0; @@ -3250,6 +3251,11 @@ static ram_addr_t ram_save_remaining(void) return count; } +ram_addr_t ram_save_transferred(void) +{ + return pages_transferred; +} + static int ram_save_live(QEMUFile *f, int stage, void *opaque) { ram_addr_t addr; @@ -3271,6 +3277,7 @@ static int ram_save_live(QEMUFile *f, int stage, void *opaque) int ret; ret = ram_save_block(f); + pages_transferred += ret; if (ret == 0) /* no more blocks */ break; } @@ -3280,7 +3287,9 @@ static int ram_save_live(QEMUFile *f, int stage, void *opaque) if (stage == 3) { /* flush all remaining blocks regardless of rate limiting */ - while (ram_save_block(f) != 0); + while (ram_save_block(f) != 0) { + pages_transferred++; + } cpu_physical_memory_set_dirty_tracking(0); } -- 1.5.6.6