Message ID | 5083220e72337d11c2f340b520d03af426577790.1338802192.git.yamahata@valinux.co.jp |
---|---|
State | New |
Headers | show |
Isaku Yamahata <yamahata@valinux.co.jp> wrote: > This patch prepares for postcopy livemigration. > It introduces -postcopy option and its internal flag, migration_postcopy. > It introduces -postcopy-flags for chaging the behavior of incoming postcopy > mainly for benchmark/debug. Why do we need postcopy flag? -incoming should be enough to detect that we are doing postcopy. QLIST_HEAD(, LoadStateEntry) loadvm_handlers = QLIST_HEAD_INITIALIZER(loadvm_handlers); LoadStateEntry *le, *new_le; uint8_t section_type; unsigned int v; int ret; if (qemu_savevm_state_blocked(NULL)) { return -EINVAL; } v = qemu_get_be32(f); if (v != QEMU_VM_FILE_MAGIC) return -EINVAL; v = qemu_get_be32(f); if (v == QEMU_VM_FILE_VERSION_COMPAT) { fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n"); return -ENOTSUP; } if (v != QEMU_VM_FILE_VERSION) return -ENOTSUP; Shouldn't we be able to change some version field here and make the "recognition of postcopy automatic"? Having to hack around a new command line option for each page is not going to be nice. And about postcopy flags, if they are for "incoming side", please consider just sent that flags on the stream as a first field? Thanks, Juan.
On Fri, Jun 08, 2012 at 12:52:54PM +0200, Juan Quintela wrote: > Isaku Yamahata <yamahata@valinux.co.jp> wrote: > > This patch prepares for postcopy livemigration. > > It introduces -postcopy option and its internal flag, migration_postcopy. > > It introduces -postcopy-flags for chaging the behavior of incoming postcopy > > mainly for benchmark/debug. > > Why do we need postcopy flag? -incoming should be enough to detect that > we are doing postcopy. > > QLIST_HEAD(, LoadStateEntry) loadvm_handlers = > QLIST_HEAD_INITIALIZER(loadvm_handlers); > LoadStateEntry *le, *new_le; > uint8_t section_type; > unsigned int v; > int ret; > > if (qemu_savevm_state_blocked(NULL)) { > return -EINVAL; > } > > v = qemu_get_be32(f); > if (v != QEMU_VM_FILE_MAGIC) > return -EINVAL; > > v = qemu_get_be32(f); > if (v == QEMU_VM_FILE_VERSION_COMPAT) { > fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n"); > return -ENOTSUP; > } > if (v != QEMU_VM_FILE_VERSION) > return -ENOTSUP; > > Shouldn't we be able to change some version field here and make the > "recognition of postcopy automatic"? Having to hack around a new > command line option for each page is not going to be nice. And about > postcopy flags, if they are for "incoming side", please consider just > sent that flags on the stream as a first field? Yes, you are right. If bumping version is allowed, -postcopy can be dropped with auto detection. -postcopy-flags can be dropped because it is used only for benchmark purpose to change incoming side behavior independent of outgoing side.
diff --git a/migration.h b/migration.h index 59e6e68..4bbcf06 100644 --- a/migration.h +++ b/migration.h @@ -103,4 +103,7 @@ void migrate_add_blocker(Error *reason); */ void migrate_del_blocker(Error *reason); +extern bool incoming_postcopy; +extern unsigned long incoming_postcopy_flags; + #endif diff --git a/qemu-options.hx b/qemu-options.hx index 8b66264..a9af31e 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2616,6 +2616,28 @@ STEXI Prepare for incoming migration, listen on @var{port}. ETEXI +DEF("postcopy", 0, QEMU_OPTION_postcopy, + "-postcopy postcopy incoming migration when -incoming is specified\n", + QEMU_ARCH_ALL) +STEXI +@item -postcopy +@findex -postcopy +start incoming migration in postcopy mode. +ETEXI + +DEF("postcopy-flags", HAS_ARG, QEMU_OPTION_postcopy_flags, + "-postcopy-flags unsigned-int(flags)\n" + " flags for postcopy incoming migration\n" + " when -incoming and -postcopy are specified.\n" + " This is for benchmark/debug purpose (default: 0)\n", + QEMU_ARCH_ALL) +STEXI +@item -postcopy-flags int +@findex -postcopy-flags +Specify flags for incoming postcopy migration when -incoming and -postcopy are +specified. This is for benchamrk/debug purpose. (default: 0) +ETEXI + DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \ "-nodefaults don't create default devices\n", QEMU_ARCH_ALL) STEXI diff --git a/vl.c b/vl.c index 62dc343..1674abb 100644 --- a/vl.c +++ b/vl.c @@ -189,6 +189,8 @@ int mem_prealloc = 0; /* force preallocation of physical target memory */ int nb_nics; NICInfo nd_table[MAX_NICS]; int autostart; +bool incoming_postcopy = false; /* When -incoming is specified, postcopy mode */ +unsigned long incoming_postcopy_flags = 0; /* flags for postcopy incoming mode */ static int rtc_utc = 1; static int rtc_date_offset = -1; /* -1 means no change */ QEMUClock *rtc_clock; @@ -3115,6 +3117,12 @@ int main(int argc, char **argv, char **envp) incoming = optarg; runstate_set(RUN_STATE_INMIGRATE); break; + case QEMU_OPTION_postcopy: + incoming_postcopy = true; + break; + case QEMU_OPTION_postcopy_flags: + incoming_postcopy_flags = strtoul(optarg, NULL, 0); + break; case QEMU_OPTION_nodefaults: default_serial = 0; default_parallel = 0;
This patch prepares for postcopy livemigration. It introduces -postcopy option and its internal flag, migration_postcopy. It introduces -postcopy-flags for chaging the behavior of incoming postcopy mainly for benchmark/debug. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> --- migration.h | 3 +++ qemu-options.hx | 22 ++++++++++++++++++++++ vl.c | 8 ++++++++ 3 files changed, 33 insertions(+), 0 deletions(-)