]> git.proxmox.com Git - qemu.git/commitdiff
block migration: Report progress also via info migration
authorJan Kiszka <jan.kiszka@siemens.com>
Mon, 30 Nov 2009 17:21:21 +0000 (18:21 +0100)
committerAnthony Liguori <aliguori@us.ibm.com>
Thu, 3 Dec 2009 16:48:53 +0000 (10:48 -0600)
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
block-migration.c
block-migration.h
migration.c

index 22d10f03c6f7ca679f7dc150ec5fa68b7a72a4ff..7510923a82195b2d4370c75282be8f60817013ab 100644 (file)
@@ -91,6 +91,38 @@ static void blk_send(QEMUFile *f, BlkMigBlock * blk)
     qemu_put_buffer(f, blk->buf, BLOCK_SIZE);
 }
 
+int blk_mig_active(void)
+{
+    return !QSIMPLEQ_EMPTY(&block_mig_state.bmds_list);
+}
+
+uint64_t blk_mig_bytes_transferred(void)
+{
+    BlkMigDevState *bmds;
+    uint64_t sum = 0;
+
+    QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) {
+        sum += bmds->completed_sectors;
+    }
+    return sum << BDRV_SECTOR_BITS;
+}
+
+uint64_t blk_mig_bytes_remaining(void)
+{
+    return blk_mig_bytes_total() - blk_mig_bytes_transferred();
+}
+
+uint64_t blk_mig_bytes_total(void)
+{
+    BlkMigDevState *bmds;
+    uint64_t sum = 0;
+
+    QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) {
+        sum += bmds->total_sectors;
+    }
+    return sum << BDRV_SECTOR_BITS;
+}
+
 static void blk_mig_read_cb(void *opaque, int ret)
 {
     BlkMigBlock *blk = opaque;
index a274d2d02df7ea7962b1aa5ff10e78eaa8bc685c..ffa8ac0bdd6134b23f64d8b89be754b1224f03b8 100644 (file)
@@ -15,5 +15,9 @@
 #define BLOCK_MIGRATION_H
 
 void blk_mig_init(void);
+int blk_mig_active(void);
+uint64_t blk_mig_bytes_transferred(void);
+uint64_t blk_mig_bytes_remaining(void);
+uint64_t blk_mig_bytes_total(void);
 
 #endif /* BLOCK_MIGRATION_H */
index f4d30222da53e3652f7db94e620bcd9c7ae94735..d6a3e2615ed0fb113594fe51a9c21fdf20c85f22 100644 (file)
@@ -18,6 +18,7 @@
 #include "sysemu.h"
 #include "block.h"
 #include "qemu_socket.h"
+#include "block-migration.h"
 
 //#define DEBUG_MIGRATION
 
@@ -174,6 +175,14 @@ void do_info_migrate(Monitor *mon)
             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);
+            if (blk_mig_active()) {
+                monitor_printf(mon, "transferred disk: %" PRIu64 " kbytes\n",
+                               blk_mig_bytes_transferred() >> 10);
+                monitor_printf(mon, "remaining disk: %" PRIu64 " kbytes\n",
+                               blk_mig_bytes_remaining() >> 10);
+                monitor_printf(mon, "total disk: %" PRIu64 " kbytes\n",
+                               blk_mig_bytes_total() >> 10);
+            }
             break;
         case MIG_STATE_COMPLETED:
             monitor_printf(mon, "completed\n");