All of lore.kernel.org
 help / color / mirror / Atom feed
From: Isaku Yamahata <yamahata@valinux.co.jp>
To: qemu-devel@nongnu.org, kvm@vger.kernel.org
Cc: quintela@redhat.com, pbonzini@redhat.com, owasserm@redhat.com,
	avi@redhat.com, dlaor@redhat.com, mdroth@linux.vnet.ibm.com,
	t.hirofuchi@aist.go.jp, satoshi.itoh@aist.go.jp,
	stefanha@gmail.com, yoshikawa.takuya@oss.ntt.co.jp,
	benoit.hudzia@gmail.com, aarcange@redhat.com, chegu_vinod@hp.com,
	aliguori@us.ibm.com
Subject: [PATCH v3 27/35] postcopy/outgoing: implement forward/backword prefault
Date: Tue, 30 Oct 2012 17:33:03 +0900	[thread overview]
Message-ID: <ff9579ff48a2cba1ebf5fd97a6dde4246ea1175d.1351582535.git.yamahata@valinux.co.jp> (raw)
In-Reply-To: <cover.1351582535.git.yamahata@valinux.co.jp>
In-Reply-To: <cover.1351582535.git.yamahata@valinux.co.jp>

When page is requested, send surrounding pages are also sent.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
---
 hmp-commands.hx      |   15 ++++++++-----
 hmp.c                |    3 +++
 migration-postcopy.c |   57 +++++++++++++++++++++++++++++++++++++++++++++-----
 migration.c          |   20 ++++++++++++++++++
 migration.h          |    2 ++
 qapi-schema.json     |    3 ++-
 6 files changed, 89 insertions(+), 11 deletions(-)

diff --git a/hmp-commands.hx b/hmp-commands.hx
index b054760..5e2c77c 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -826,26 +826,31 @@ ETEXI
 
     {
         .name       = "migrate",
-        .args_type  = "detach:-d,blk:-b,inc:-i,postcopy:-p,nobg:-n,uri:s",
-        .params     = "[-d] [-b] [-i] [-p [-n]] uri",
+        .args_type  = "detach:-d,blk:-b,inc:-i,postcopy:-p,nobg:-n,uri:s,"
+	              "forward:i?,backward:i?",
+        .params     = "[-d] [-b] [-i] [-p [-n] uri [forward] [backword]",
         .help       = "migrate to URI (using -d to not wait for completion)"
 		      "\n\t\t\t -b for migration without shared storage with"
 		      " full copy of disk\n\t\t\t -i for migration without "
 		      "shared storage with incremental copy of disk "
 		      "(base image shared between src and destination)"
 		      "\n\t\t\t-p for migration with postcopy mode enabled"
-		      "\n\t\t\t-n for no background transfer of postcopy mode",
+		      "\n\t\t\t-n for no background transfer of postcopy mode"
+		      "\n\t\t\tforward: the number of pages to "
+		      "forward-prefault when postcopy (default 0)"
+		      "\n\t\t\tbackward: the number of pages to "
+		      "backward-prefault when postcopy (default 0)",
         .mhandler.cmd = hmp_migrate,
     },
 
 
 STEXI
-@item migrate [-d] [-b] [-i] [-p [-n]] @var{uri}
+@item migrate [-d] [-b] [-i] [-p [-n]] @var{uri} @var{forward} @var{backward}
 @findex migrate
 Migrate to @var{uri} (using -d to not wait for completion).
 	-b for migration with full copy of disk
 	-i for migration with incremental copy of disk (base image is shared)
-	-p for migration with postcopy mode enabled
+	-p for migration with postcopy mode enabled (forward/backward is prefault size when postcopy)
 	-n for migration with postcopy mode enabled without background transfer
 ETEXI
 
diff --git a/hmp.c b/hmp.c
index 203b552..fb1275d 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1037,11 +1037,14 @@ void hmp_migrate(Monitor *mon, const QDict *qdict)
     int inc = qdict_get_try_bool(qdict, "inc", 0);
     int postcopy = qdict_get_try_bool(qdict, "postcopy", 0);
     int nobg = qdict_get_try_bool(qdict, "nobg", 0);
+    int forward = qdict_get_try_int(qdict, "forward", 0);
+    int backward = qdict_get_try_int(qdict, "backward", 0);
     const char *uri = qdict_get_str(qdict, "uri");
     Error *err = NULL;
 
     qmp_migrate(uri, !!blk, blk, !!inc, inc, false, false,
                 !!postcopy, postcopy, !!nobg, nobg,
+                !!forward, forward, !!backward, backward,
                 &err);
     if (err) {
         monitor_printf(mon, "migrate: %s\n", error_get_pretty(err));
diff --git a/migration-postcopy.c b/migration-postcopy.c
index 5f98ae6..3d51898 100644
--- a/migration-postcopy.c
+++ b/migration-postcopy.c
@@ -344,6 +344,37 @@ int postcopy_outgoing_ram_save_complete(QEMUFile *f, void *opaque)
     return 0;
 }
 
+static void postcopy_outgoing_ram_save_page(PostcopyOutgoingState *s,
+                                            uint64_t pgoffset, bool *written,
+                                            bool forward,
+                                            int prefault_pgoffset)
+{
+    ram_addr_t offset;
+    int ret;
+
+    if (forward) {
+        pgoffset += prefault_pgoffset;
+    } else {
+        if (pgoffset < prefault_pgoffset) {
+            return;
+        }
+        pgoffset -= prefault_pgoffset;
+    }
+
+    offset = pgoffset << TARGET_PAGE_BITS;
+    if (offset >= s->last_block_read->length) {
+        assert(forward);
+        assert(prefault_pgoffset > 0);
+        return;
+    }
+
+    ret = ram_save_page(s->mig_buffered_write, s->last_block_read, offset,
+                        false);
+    if (ret > 0) {
+        *written = true;
+    }
+}
+
 /*
  * return value
  *   0: continue postcopy mode
@@ -355,6 +386,7 @@ static int postcopy_outgoing_handle_req(PostcopyOutgoingState *s,
                                         bool *written)
 {
     int i;
+    uint64_t j;
     RAMBlock *block;
 
     DPRINTF("cmd %d state %d\n", req->cmd, s->state);
@@ -387,11 +419,26 @@ static int postcopy_outgoing_handle_req(PostcopyOutgoingState *s,
             break;
         }
         for (i = 0; i < req->nr; i++) {
-            DPRINTF("offs[%d] 0x%"PRIx64"\n", i, req->pgoffs[i]);
-            int ret = ram_save_page(s->mig_buffered_write, s->last_block_read,
-                                    req->pgoffs[i] << TARGET_PAGE_BITS, false);
-            if (ret > 0) {
-                *written = true;
+            DPRINTF("pgoffs[%d] 0x%"PRIx64"\n", i, req->pgoffs[i]);
+            postcopy_outgoing_ram_save_page(s, req->pgoffs[i], written,
+                                            true, 0);
+        }
+        /* forward prefault */
+        for (j = 1; j <= s->ms->params.prefault_forward; j++) {
+            for (i = 0; i < req->nr; i++) {
+                DPRINTF("pgoffs[%d] + 0x%"PRIx64" 0x%"PRIx64"\n",
+                        i, j, req->pgoffs[i] + j);
+                postcopy_outgoing_ram_save_page(s, req->pgoffs[i], written,
+                                                true, j);
+            }
+        }
+        /* backward prefault */
+        for (j = 1; j <= s->ms->params.prefault_backward; j++) {
+            for (i = 0; i < req->nr; i++) {
+                DPRINTF("pgoffs[%d] - 0x%"PRIx64" 0x%"PRIx64"\n",
+                        i, j, req->pgoffs[i] - j);
+                postcopy_outgoing_ram_save_page(s, req->pgoffs[i], written,
+                                                false, j);
             }
         }
         break;
diff --git a/migration.c b/migration.c
index 279dda5..f29e3bb 100644
--- a/migration.c
+++ b/migration.c
@@ -511,6 +511,8 @@ void migrate_del_blocker(Error *reason)
 void qmp_migrate(const char *uri, bool has_blk, bool blk,
                  bool has_inc, bool inc, bool has_detach, bool detach,
                  bool has_postcopy, bool postcopy, bool has_nobg, bool nobg,
+                 bool has_forward, int64_t forward,
+                 bool has_backward, int64_t backward,
                  Error **errp)
 {
     MigrationState *s = migrate_get_current();
@@ -522,6 +524,24 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
     params.shared = inc;
     params.postcopy = postcopy;
     params.nobg = nobg;
+    params.prefault_forward = 0;
+    if (has_forward) {
+        if (forward < 0) {
+            error_set(errp, QERR_INVALID_PARAMETER_VALUE,
+                      "forward", "forward >= 0");
+            return;
+        }
+        params.prefault_forward = forward;
+    }
+    params.prefault_backward = 0;
+    if (has_backward) {
+        if (backward < 0) {
+            error_set(errp, QERR_INVALID_PARAMETER_VALUE,
+                      "backward", "backward >= 0");
+            return;
+        }
+        params.prefault_backward = backward;
+    }
 
     if (s->state == MIG_STATE_ACTIVE) {
         error_set(errp, QERR_MIGRATION_ACTIVE);
diff --git a/migration.h b/migration.h
index 6724c19..8462251 100644
--- a/migration.h
+++ b/migration.h
@@ -26,6 +26,8 @@ struct MigrationParams {
     bool shared;
     bool postcopy;
     bool nobg;
+    int64_t prefault_forward;
+    int64_t prefault_backward;
 };
 
 typedef struct MigrationState MigrationState;
diff --git a/qapi-schema.json b/qapi-schema.json
index 70d0577..746bf21 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -2095,7 +2095,8 @@
 ##
 { 'command': 'migrate',
   'data': {'uri': 'str', '*blk': 'bool', '*inc': 'bool', '*detach': 'bool' ,
-           '*postcopy': 'bool', '*nobg': 'bool'} }
+           '*postcopy': 'bool', '*nobg': 'bool',
+           '*forward': 'int', '*backward': 'int'} }
 
 # @xen-save-devices-state:
 #
-- 
1.7.10.4


WARNING: multiple messages have this Message-ID (diff)
From: Isaku Yamahata <yamahata@valinux.co.jp>
To: qemu-devel@nongnu.org, kvm@vger.kernel.org
Cc: benoit.hudzia@gmail.com, aarcange@redhat.com,
	aliguori@us.ibm.com, quintela@redhat.com, stefanha@gmail.com,
	t.hirofuchi@aist.go.jp, dlaor@redhat.com,
	satoshi.itoh@aist.go.jp, mdroth@linux.vnet.ibm.com,
	yoshikawa.takuya@oss.ntt.co.jp, owasserm@redhat.com,
	avi@redhat.com, pbonzini@redhat.com, chegu_vinod@hp.com
Subject: [Qemu-devel] [PATCH v3 27/35] postcopy/outgoing: implement forward/backword prefault
Date: Tue, 30 Oct 2012 17:33:03 +0900	[thread overview]
Message-ID: <ff9579ff48a2cba1ebf5fd97a6dde4246ea1175d.1351582535.git.yamahata@valinux.co.jp> (raw)
In-Reply-To: <cover.1351582535.git.yamahata@valinux.co.jp>
In-Reply-To: <cover.1351582535.git.yamahata@valinux.co.jp>

When page is requested, send surrounding pages are also sent.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
---
 hmp-commands.hx      |   15 ++++++++-----
 hmp.c                |    3 +++
 migration-postcopy.c |   57 +++++++++++++++++++++++++++++++++++++++++++++-----
 migration.c          |   20 ++++++++++++++++++
 migration.h          |    2 ++
 qapi-schema.json     |    3 ++-
 6 files changed, 89 insertions(+), 11 deletions(-)

diff --git a/hmp-commands.hx b/hmp-commands.hx
index b054760..5e2c77c 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -826,26 +826,31 @@ ETEXI
 
     {
         .name       = "migrate",
-        .args_type  = "detach:-d,blk:-b,inc:-i,postcopy:-p,nobg:-n,uri:s",
-        .params     = "[-d] [-b] [-i] [-p [-n]] uri",
+        .args_type  = "detach:-d,blk:-b,inc:-i,postcopy:-p,nobg:-n,uri:s,"
+	              "forward:i?,backward:i?",
+        .params     = "[-d] [-b] [-i] [-p [-n] uri [forward] [backword]",
         .help       = "migrate to URI (using -d to not wait for completion)"
 		      "\n\t\t\t -b for migration without shared storage with"
 		      " full copy of disk\n\t\t\t -i for migration without "
 		      "shared storage with incremental copy of disk "
 		      "(base image shared between src and destination)"
 		      "\n\t\t\t-p for migration with postcopy mode enabled"
-		      "\n\t\t\t-n for no background transfer of postcopy mode",
+		      "\n\t\t\t-n for no background transfer of postcopy mode"
+		      "\n\t\t\tforward: the number of pages to "
+		      "forward-prefault when postcopy (default 0)"
+		      "\n\t\t\tbackward: the number of pages to "
+		      "backward-prefault when postcopy (default 0)",
         .mhandler.cmd = hmp_migrate,
     },
 
 
 STEXI
-@item migrate [-d] [-b] [-i] [-p [-n]] @var{uri}
+@item migrate [-d] [-b] [-i] [-p [-n]] @var{uri} @var{forward} @var{backward}
 @findex migrate
 Migrate to @var{uri} (using -d to not wait for completion).
 	-b for migration with full copy of disk
 	-i for migration with incremental copy of disk (base image is shared)
-	-p for migration with postcopy mode enabled
+	-p for migration with postcopy mode enabled (forward/backward is prefault size when postcopy)
 	-n for migration with postcopy mode enabled without background transfer
 ETEXI
 
diff --git a/hmp.c b/hmp.c
index 203b552..fb1275d 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1037,11 +1037,14 @@ void hmp_migrate(Monitor *mon, const QDict *qdict)
     int inc = qdict_get_try_bool(qdict, "inc", 0);
     int postcopy = qdict_get_try_bool(qdict, "postcopy", 0);
     int nobg = qdict_get_try_bool(qdict, "nobg", 0);
+    int forward = qdict_get_try_int(qdict, "forward", 0);
+    int backward = qdict_get_try_int(qdict, "backward", 0);
     const char *uri = qdict_get_str(qdict, "uri");
     Error *err = NULL;
 
     qmp_migrate(uri, !!blk, blk, !!inc, inc, false, false,
                 !!postcopy, postcopy, !!nobg, nobg,
+                !!forward, forward, !!backward, backward,
                 &err);
     if (err) {
         monitor_printf(mon, "migrate: %s\n", error_get_pretty(err));
diff --git a/migration-postcopy.c b/migration-postcopy.c
index 5f98ae6..3d51898 100644
--- a/migration-postcopy.c
+++ b/migration-postcopy.c
@@ -344,6 +344,37 @@ int postcopy_outgoing_ram_save_complete(QEMUFile *f, void *opaque)
     return 0;
 }
 
+static void postcopy_outgoing_ram_save_page(PostcopyOutgoingState *s,
+                                            uint64_t pgoffset, bool *written,
+                                            bool forward,
+                                            int prefault_pgoffset)
+{
+    ram_addr_t offset;
+    int ret;
+
+    if (forward) {
+        pgoffset += prefault_pgoffset;
+    } else {
+        if (pgoffset < prefault_pgoffset) {
+            return;
+        }
+        pgoffset -= prefault_pgoffset;
+    }
+
+    offset = pgoffset << TARGET_PAGE_BITS;
+    if (offset >= s->last_block_read->length) {
+        assert(forward);
+        assert(prefault_pgoffset > 0);
+        return;
+    }
+
+    ret = ram_save_page(s->mig_buffered_write, s->last_block_read, offset,
+                        false);
+    if (ret > 0) {
+        *written = true;
+    }
+}
+
 /*
  * return value
  *   0: continue postcopy mode
@@ -355,6 +386,7 @@ static int postcopy_outgoing_handle_req(PostcopyOutgoingState *s,
                                         bool *written)
 {
     int i;
+    uint64_t j;
     RAMBlock *block;
 
     DPRINTF("cmd %d state %d\n", req->cmd, s->state);
@@ -387,11 +419,26 @@ static int postcopy_outgoing_handle_req(PostcopyOutgoingState *s,
             break;
         }
         for (i = 0; i < req->nr; i++) {
-            DPRINTF("offs[%d] 0x%"PRIx64"\n", i, req->pgoffs[i]);
-            int ret = ram_save_page(s->mig_buffered_write, s->last_block_read,
-                                    req->pgoffs[i] << TARGET_PAGE_BITS, false);
-            if (ret > 0) {
-                *written = true;
+            DPRINTF("pgoffs[%d] 0x%"PRIx64"\n", i, req->pgoffs[i]);
+            postcopy_outgoing_ram_save_page(s, req->pgoffs[i], written,
+                                            true, 0);
+        }
+        /* forward prefault */
+        for (j = 1; j <= s->ms->params.prefault_forward; j++) {
+            for (i = 0; i < req->nr; i++) {
+                DPRINTF("pgoffs[%d] + 0x%"PRIx64" 0x%"PRIx64"\n",
+                        i, j, req->pgoffs[i] + j);
+                postcopy_outgoing_ram_save_page(s, req->pgoffs[i], written,
+                                                true, j);
+            }
+        }
+        /* backward prefault */
+        for (j = 1; j <= s->ms->params.prefault_backward; j++) {
+            for (i = 0; i < req->nr; i++) {
+                DPRINTF("pgoffs[%d] - 0x%"PRIx64" 0x%"PRIx64"\n",
+                        i, j, req->pgoffs[i] - j);
+                postcopy_outgoing_ram_save_page(s, req->pgoffs[i], written,
+                                                false, j);
             }
         }
         break;
diff --git a/migration.c b/migration.c
index 279dda5..f29e3bb 100644
--- a/migration.c
+++ b/migration.c
@@ -511,6 +511,8 @@ void migrate_del_blocker(Error *reason)
 void qmp_migrate(const char *uri, bool has_blk, bool blk,
                  bool has_inc, bool inc, bool has_detach, bool detach,
                  bool has_postcopy, bool postcopy, bool has_nobg, bool nobg,
+                 bool has_forward, int64_t forward,
+                 bool has_backward, int64_t backward,
                  Error **errp)
 {
     MigrationState *s = migrate_get_current();
@@ -522,6 +524,24 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
     params.shared = inc;
     params.postcopy = postcopy;
     params.nobg = nobg;
+    params.prefault_forward = 0;
+    if (has_forward) {
+        if (forward < 0) {
+            error_set(errp, QERR_INVALID_PARAMETER_VALUE,
+                      "forward", "forward >= 0");
+            return;
+        }
+        params.prefault_forward = forward;
+    }
+    params.prefault_backward = 0;
+    if (has_backward) {
+        if (backward < 0) {
+            error_set(errp, QERR_INVALID_PARAMETER_VALUE,
+                      "backward", "backward >= 0");
+            return;
+        }
+        params.prefault_backward = backward;
+    }
 
     if (s->state == MIG_STATE_ACTIVE) {
         error_set(errp, QERR_MIGRATION_ACTIVE);
diff --git a/migration.h b/migration.h
index 6724c19..8462251 100644
--- a/migration.h
+++ b/migration.h
@@ -26,6 +26,8 @@ struct MigrationParams {
     bool shared;
     bool postcopy;
     bool nobg;
+    int64_t prefault_forward;
+    int64_t prefault_backward;
 };
 
 typedef struct MigrationState MigrationState;
diff --git a/qapi-schema.json b/qapi-schema.json
index 70d0577..746bf21 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -2095,7 +2095,8 @@
 ##
 { 'command': 'migrate',
   'data': {'uri': 'str', '*blk': 'bool', '*inc': 'bool', '*detach': 'bool' ,
-           '*postcopy': 'bool', '*nobg': 'bool'} }
+           '*postcopy': 'bool', '*nobg': 'bool',
+           '*forward': 'int', '*backward': 'int'} }
 
 # @xen-save-devices-state:
 #
-- 
1.7.10.4

  parent reply	other threads:[~2012-10-30  8:33 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-30  8:32 [PATCH v3 00/35] postcopy live migration Isaku Yamahata
2012-10-30  8:32 ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 01/35] migration.c: remove redundant line in migrate_init() Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 02/35] arch_init: DPRINTF format error and typo Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 03/35] split MRU ram list Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 04/35] add a version number to ram_list Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 05/35] protect the ramlist with a separate mutex Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 06/35] osdep: add qemu_read_full() to read interrupt-safely Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 07/35] savevm: export qemu_peek_buffer, qemu_peek_byte, qemu_file_skip, qemu_fflush Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 08/35] savevm/QEMUFile: consolidate QEMUFile functions a bit Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 09/35] savevm/QEMUFile: introduce qemu_fopen_fd Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 10/35] savevm/QEMUFile: add read/write QEMUFile on memory buffer Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 11/35] savevm, buffered_file: introduce method to drain buffer of buffered file Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 12/35] arch_init: export RAM_SAVE_xxx flags for postcopy Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 13/35] arch_init/ram_save: introduce constant for ram save version = 4 Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 14/35] arch_init: refactor ram_save_block() and export ram_save_block() Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 15/35] arch_init/ram_save_setup: factor out bitmap alloc/free Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 16/35] arch_init/ram_load: refactor ram_load Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 17/35] arch_init: factor out logic to find ram block with id string Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 18/35] migration: export migrate_fd_completed() and migrate_fd_cleanup() Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 19/35] uvmem.h: import Linux uvmem.h and teach update-linux-headers.sh Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 20/35] osdep: add QEMU_MADV_REMOVE and tirivial fix Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 21/35] postcopy: introduce helper functions for postcopy Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 22/35] savevm: add new section that is used by postcopy Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:32 ` [PATCH v3 23/35] postcopy: implement incoming part of postcopy live migration Isaku Yamahata
2012-10-30  8:32   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:33 ` [PATCH v3 24/35] postcopy outgoing: add -p option to migrate command Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-11-01 19:48   ` Eric Blake
2012-11-01 19:48     ` [Qemu-devel] " Eric Blake
2012-10-30  8:33 ` [PATCH v3 25/35] postcopy: implement outgoing part of postcopy live migration Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:33 ` [PATCH v3 26/35] postcopy/outgoing: add -n options to disable background transfer Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-11-01 19:56   ` Eric Blake
2012-11-01 19:56     ` Eric Blake
2012-10-30  8:33 ` Isaku Yamahata [this message]
2012-10-30  8:33   ` [Qemu-devel] [PATCH v3 27/35] postcopy/outgoing: implement forward/backword prefault Isaku Yamahata
2012-11-01 20:10   ` Eric Blake
2012-11-01 20:10     ` [Qemu-devel] " Eric Blake
2012-11-02  5:24     ` Isaku Yamahata
2012-11-02  5:24       ` [Qemu-devel] " Isaku Yamahata
2012-11-02 15:22       ` Eric Blake
2012-11-02 15:22         ` Eric Blake
2012-10-30  8:33 ` [PATCH v3 28/35] arch_init: factor out setting last_block, last_offset Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:33 ` [PATCH v3 29/35] postcopy/outgoing: add movebg mode(-m) to migration command Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-11-01 20:15   ` Eric Blake
2012-11-01 20:15     ` [Qemu-devel] " Eric Blake
2012-10-30  8:33 ` [PATCH v3 30/35] arch_init: factor out ram_load Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:33 ` [PATCH v3 31/35] arch_init: export ram_save_iterate() Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:33 ` [PATCH v3 32/35] postcopy: pre+post optimization incoming side Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:33 ` [PATCH v3 33/35] arch_init: export migration_bitmap_sync and helper method to get bitmap Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-10-30  8:33 ` [PATCH v3 34/35] postcopy/outgoing: introduce precopy_count parameter Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-11-01 21:20   ` Eric Blake
2012-11-01 21:20     ` Eric Blake
2012-10-30  8:33 ` [PATCH v3 35/35] postcopy: pre+post optimization outgoing side Isaku Yamahata
2012-10-30  8:33   ` [Qemu-devel] " Isaku Yamahata
2012-10-30 18:53 ` [PATCH v3 00/35] postcopy live migration Benoit Hudzia
2012-10-30 18:53   ` [Qemu-devel] " Benoit Hudzia
2012-10-31  3:25   ` Isaku Yamahata
2012-10-31  3:25     ` Isaku Yamahata
2012-10-30 18:55 ` Benoit Hudzia
2012-10-30 18:55   ` [Qemu-devel] " Benoit Hudzia
2012-11-06 11:04 ` Orit Wasserman
2012-11-06 11:04   ` [Qemu-devel] " Orit Wasserman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ff9579ff48a2cba1ebf5fd97a6dde4246ea1175d.1351582535.git.yamahata@valinux.co.jp \
    --to=yamahata@valinux.co.jp \
    --cc=aarcange@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --cc=benoit.hudzia@gmail.com \
    --cc=chegu_vinod@hp.com \
    --cc=dlaor@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=owasserm@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=satoshi.itoh@aist.go.jp \
    --cc=stefanha@gmail.com \
    --cc=t.hirofuchi@aist.go.jp \
    --cc=yoshikawa.takuya@oss.ntt.co.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.