diff options
-rw-r--r-- | migration.c | 3 | ||||
-rw-r--r-- | sysemu.h | 4 | ||||
-rw-r--r-- | vl.c | 21 |
3 files changed, 27 insertions, 1 deletions
diff --git a/migration.c b/migration.c index ca397fa..cccc2d1 100644 --- a/migration.c +++ b/migration.c @@ -109,6 +109,9 @@ void do_info_migrate(Monitor *mon) switch (s->get_status(s)) { case MIG_STATE_ACTIVE: monitor_printf(mon, "active\n"); + monitor_printf(mon, "transferred ram: %" PRIu64 " kbytes\n", ram_bytes_transferred() >> 10); + monitor_printf(mon, "remaining ram: %" PRIu64 " kbytes\n", ram_bytes_remaining() >> 10); + monitor_printf(mon, "total ram: %" PRIu64 " kbytes\n", ram_bytes_total() >> 10); break; case MIG_STATE_COMPLETED: monitor_printf(mon, "completed\n"); @@ -28,6 +28,10 @@ void qemu_del_vm_change_state_handler(VMChangeStateEntry *e); void vm_start(void); void vm_stop(int reason); +uint64_t ram_bytes_remaining(void); +uint64_t ram_bytes_transferred(void); +uint64_t ram_bytes_total(void); + int64_t cpu_get_ticks(void); void cpu_enable_ticks(void); void cpu_disable_ticks(void); @@ -3234,6 +3234,7 @@ static int ram_save_block(QEMUFile *f) } static ram_addr_t ram_save_threshold = 10; +static uint64_t bytes_transferred = 0; static ram_addr_t ram_save_remaining(void) { @@ -3248,6 +3249,21 @@ static ram_addr_t ram_save_remaining(void) return count; } +uint64_t ram_bytes_remaining(void) +{ + return ram_save_remaining() * TARGET_PAGE_SIZE; +} + +uint64_t ram_bytes_transferred(void) +{ + return bytes_transferred; +} + +uint64_t ram_bytes_total(void) +{ + return last_ram_offset; +} + static int ram_save_live(QEMUFile *f, int stage, void *opaque) { ram_addr_t addr; @@ -3269,6 +3285,7 @@ static int ram_save_live(QEMUFile *f, int stage, void *opaque) int ret; ret = ram_save_block(f); + bytes_transferred += ret * TARGET_PAGE_SIZE; if (ret == 0) /* no more blocks */ break; } @@ -3278,7 +3295,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) { + bytes_transferred += TARGET_PAGE_SIZE; + } cpu_physical_memory_set_dirty_tracking(0); } |