Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 340e01248478ba8b78a6d4d1809b1eff > files > 269

kvm-83-270.el5_11.src.rpm

From 83163d4bdef266f075fda9fa0ff4b6bc6ab0752b Mon Sep 17 00:00:00 2001
From: Glauber Costa <glommer@redhat.com>
Date: Tue, 26 May 2009 11:11:55 -0400
Subject: [PATCH 01/10] augment info migrate with page status

This patch augments info migrate output with status about:
* ram bytes remaining
* ram bytes transferred
* ram bytes total

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

[v2: fixes bytes_transferred type]

Signed-off-by: Glauber Costa <glommer@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
RH-Upstream-status: upstream (qemu/master)
Message-Id: <1243350717-13012-2-git-send-email-glommer@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Message-Id: <1243352661-13226-2-git-send-email-glommer@redhat.com>
Acked-by: Dor Laor <dlaor@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: Uri Lublin <uril@redhat.com>
Bugzilla: 504237
---
 qemu/migration.c |    3 +++
 qemu/sysemu.h    |    4 ++++
 qemu/vl.c        |   21 ++++++++++++++++++++-
 3 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/qemu/migration.c b/qemu/migration.c
index 7cfa749..4cf5488 100644
--- a/qemu/migration.c
+++ b/qemu/migration.c
@@ -110,6 +110,9 @@ void do_info_migrate(void)
         switch (s->get_status(s)) {
         case MIG_STATE_ACTIVE:
             term_printf("active\n");
+            term_printf("transferred ram: %" PRIu64 " kbytes\n", ram_bytes_transferred() >> 10);
+            term_printf("remaining ram: %" PRIu64 " kbytes\n", ram_bytes_remaining() >> 10);
+            term_printf("total ram: %" PRIu64 " kbytes\n", ram_bytes_total() >> 10);
             break;
         case MIG_STATE_COMPLETED:
             term_printf("completed\n");
diff --git a/qemu/sysemu.h b/qemu/sysemu.h
index c62e7cd..939f19a 100644
--- a/qemu/sysemu.h
+++ b/qemu/sysemu.h
@@ -26,6 +26,10 @@ void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
 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);
diff --git a/qemu/vl.c b/qemu/vl.c
index e81687a..626f4aa 100644
--- a/qemu/vl.c
+++ b/qemu/vl.c
@@ -3300,6 +3300,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)
 {
@@ -3314,6 +3315,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 phys_ram_size;
+}
+
 static int ram_save_live(QEMUFile *f, int stage, void *opaque)
 {
     ram_addr_t addr;
@@ -3335,6 +3351,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;
     }
@@ -3349,7 +3366,9 @@ static int ram_save_live(QEMUFile *f, int stage, void *opaque)
             return 0;
         }
         /* 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);
     }
 
-- 
1.6.3.rc4.29.g8146