From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Bharata B Rao <bharata.rao@gmail.com>
Cc: aarcange@redhat.com, yamahata@private.email.ne.jp,
quintela@redhat.com, liang.z.li@intel.com,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
luis@cs.umu.se, Bharata B Rao <bharata@linux.vnet.ibm.com>,
"amit.shah@redhat.com" <amit.shah@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [PATCH v9 00/56] Postcopy implementation
Date: Fri, 6 Nov 2015 13:43:42 +0000 [thread overview]
Message-ID: <20151106134341.GG2459@work-vm> (raw)
In-Reply-To: <20151106122222.GF2459@work-vm>
* Dr. David Alan Gilbert (dgilbert@redhat.com) wrote:
> * Bharata B Rao (bharata.rao@gmail.com) wrote:
> > On Fri, Nov 6, 2015 at 2:39 PM, Dr. David Alan Gilbert
> > <dgilbert@redhat.com> wrote:
> > > * Bharata B Rao (bharata@linux.vnet.ibm.com) wrote:
> > >> On Thu, Nov 05, 2015 at 06:10:27PM +0000, Dr. David Alan Gilbert (git) wrote:
> > >> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > >> >
> > >> > This is the 9th cut of my version of postcopy.
> > >> >
> > >> > The userfaultfd linux kernel code is now in the upstream kernel
> > >> > tree, and so 4.3 can be used without modification.
> > >> >
> > >> > This qemu series can be found at:
> > >> > https://github.com/orbitfp7/qemu.git
> > >> > on the wp3-postcopy-v9 tag
> > >> >
> > >> > Testing status:
> > >> > * Tested heavily on x86
> > >> > * Smoke tested on aarch64 (so it does work on different page sizes)
> > >>
> > >> Tested minimally on ppc64 with back and forth postcopy migration of
> > >> unloaded pseries guest within the localhost - works as expected.
> > >>
> > >> However I am seeing a failure in one case. I am not sure if this is
> > >> a user error or a real issue in postcopy migration. If I switch to postcopy
> > >> migration immediately after starting the migration, I see the migration
> > >> failing with error:
> > >>
> > >> qemu-system-ppc64: qemu_savevm_send_packaged: Unreasonably large packaged state: 25905005
> > >
> > > I put an arbitrary limit of 16MB (see MAX_VM_CMD_PACKAGED_SIZE in include/sysemu/sysemu.h)
> > > on the size of the data accepted into the packaged blob. How big is the htab data likely to be?
> >
> > HTAB size is a variable and depends on maxmem size. It will be 1/128
> > th of maxmem. So for a 32G guest, HTAB will be 256M in size.
>
> OK, that does get a bit big.
> Two possible fixes;
> 1 - postcopy htab (I don't know htab to know how hard that is)
> 2 - do one pass of iterable/non-postcopiable devices before we start the package;
> I'm just writing a patch to try that; I'll send it to you to let
> you try once I get it to not-break normal migration.
>
Hi Bharata,
Can you try the patch below and let me know if it solves the problem;
if it doesn't, I'd be interested to know when the HTAB routines get
called in the precopy/postcopy phases.
Dave
From 0f965d4dec7b188aec5324c3350704f993517cc8 Mon Sep 17 00:00:00 2001
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Date: Fri, 6 Nov 2015 12:06:16 +0000
Subject: [PATCH] Finish non-postcopiable iterative devices before package
Where we have iterable, but non-postcopiable devices (e.g. htab
or block migration), complete them before forming the 'package'
but with the CPUs stopped. This stops them filling up the package.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
include/sysemu/sysemu.h | 2 +-
migration/migration.c | 10 ++++++++--
migration/savevm.c | 10 ++++++++--
3 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index f992494..3bb8897 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -112,7 +112,7 @@ void qemu_savevm_state_header(QEMUFile *f);
int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy);
void qemu_savevm_state_cleanup(void);
void qemu_savevm_state_complete_postcopy(QEMUFile *f);
-void qemu_savevm_state_complete_precopy(QEMUFile *f);
+void qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only);
void qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size,
uint64_t *res_non_postcopiable,
uint64_t *res_postcopiable);
diff --git a/migration/migration.c b/migration/migration.c
index fd51d79..1d382ce 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1429,6 +1429,12 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
}
/*
+ * Cause any non-postcopiable, but iterative devices to
+ * send out their final data.
+ */
+ qemu_savevm_state_complete_precopy(ms->file, true);
+
+ /*
* in Finish migrate and with the io-lock held everything should
* be quiet, but we've potentially still got dirty pages and we
* need to tell the destination to throw any pages it's already received
@@ -1471,7 +1477,7 @@ static int postcopy_start(MigrationState *ms, bool *old_vm_running)
*/
qemu_savevm_send_postcopy_listen(fb);
- qemu_savevm_state_complete_precopy(fb);
+ qemu_savevm_state_complete_precopy(fb, false);
qemu_savevm_send_ping(fb, 3);
qemu_savevm_send_postcopy_run(fb);
@@ -1538,7 +1544,7 @@ static void migration_completion(MigrationState *s, int current_active_state,
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
if (ret >= 0) {
qemu_file_set_rate_limit(s->file, INT64_MAX);
- qemu_savevm_state_complete_precopy(s->file);
+ qemu_savevm_state_complete_precopy(s->file, false);
}
}
qemu_mutex_unlock_iothread();
diff --git a/migration/savevm.c b/migration/savevm.c
index e5c8482..7e43923 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1026,7 +1026,7 @@ void qemu_savevm_state_complete_postcopy(QEMUFile *f)
qemu_fflush(f);
}
-void qemu_savevm_state_complete_precopy(QEMUFile *f)
+void qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only)
{
QJSON *vmdesc;
int vmdesc_len;
@@ -1041,9 +1041,11 @@ void qemu_savevm_state_complete_precopy(QEMUFile *f)
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
if (!se->ops ||
(in_postcopy && se->ops->save_live_complete_postcopy) ||
+ (in_postcopy && !iterable_only) ||
!se->ops->save_live_complete_precopy) {
continue;
}
+
if (se->ops && se->ops->is_active) {
if (!se->ops->is_active(se->opaque)) {
continue;
@@ -1062,6 +1064,10 @@ void qemu_savevm_state_complete_precopy(QEMUFile *f)
}
}
+ if (iterable_only) {
+ return;
+ }
+
vmdesc = qjson_new();
json_prop_int(vmdesc, "page_size", TARGET_PAGE_SIZE);
json_start_array(vmdesc, "devices");
@@ -1176,7 +1182,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp)
ret = qemu_file_get_error(f);
if (ret == 0) {
- qemu_savevm_state_complete_precopy(f);
+ qemu_savevm_state_complete_precopy(f, false);
ret = qemu_file_get_error(f);
}
if (ret != 0) {
--
2.5.0
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2015-11-06 13:43 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-05 18:10 [Qemu-devel] [PATCH v9 00/56] Postcopy implementation Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 01/56] Add postcopy documentation Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 02/56] Provide runtime Target page information Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 03/56] Move configuration section writing Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 04/56] Move page_size_init earlier Dr. David Alan Gilbert (git)
2015-11-09 9:21 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 05/56] qemu_ram_block_from_host Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 06/56] qemu_ram_block_by_name Dr. David Alan Gilbert (git)
2015-11-09 9:24 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 07/56] Rename mis->file to from_src_file Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 08/56] Add qemu_get_buffer_in_place to avoid copies some of the time Dr. David Alan Gilbert (git)
2015-11-09 9:25 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 09/56] Add wrapper for setting blocking status on a QEMUFile Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 10/56] Add QEMU_MADV_NOHUGEPAGE Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 11/56] ram_debug_dump_bitmap: Dump a migration bitmap as text Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 12/56] ram_load: Factor out host_from_stream_offset call and check Dr. David Alan Gilbert (git)
2015-11-09 9:29 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 13/56] migrate_init: Call from savevm Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 14/56] Rename save_live_complete to save_live_complete_precopy Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 15/56] Add Linux userfaultfd.h header Dr. David Alan Gilbert (git)
2015-11-09 9:31 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 16/56] Return path: Open a return path on QEMUFile for sockets Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 17/56] Return path: socket_writev_buffer: Block even on non-blocking fd's Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 18/56] Migration commands Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 19/56] Return path: Control commands Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 20/56] Return path: Send responses from destination to source Dr. David Alan Gilbert (git)
2015-11-09 10:54 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 21/56] migration_is_setup_or_active Dr. David Alan Gilbert (git)
2015-11-09 10:55 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 22/56] Return path: Source handling of return path Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 23/56] Rework loadvm path for subloops Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 24/56] Add migration-capability boolean for postcopy-ram Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 25/56] Add wrappers and handlers for sending/receiving the postcopy-ram migration messages Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 26/56] MIG_CMD_PACKAGED: Send a packaged chunk of migration stream Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 27/56] Modify save_live_pending for postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 28/56] postcopy: OS support test Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 29/56] migrate_start_postcopy: Command to trigger transition to postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 30/56] migration_completion: Take current state Dr. David Alan Gilbert (git)
2015-11-09 10:57 ` Juan Quintela
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 31/56] MIGRATION_STATUS_POSTCOPY_ACTIVE: Add new migration state Dr. David Alan Gilbert (git)
2015-11-05 18:10 ` [Qemu-devel] [PATCH v9 32/56] Avoid sending vmdescription during postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 33/56] Add qemu_savevm_state_complete_postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 34/56] Postcopy: Maintain unsentmap Dr. David Alan Gilbert (git)
2015-11-09 11:01 ` Juan Quintela
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 35/56] Postcopy: Calculate discard Dr. David Alan Gilbert (git)
2015-11-09 11:08 ` Juan Quintela
2015-11-09 18:27 ` Dr. David Alan Gilbert
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 36/56] postcopy: Incoming initialisation Dr. David Alan Gilbert (git)
2015-11-09 11:11 ` Juan Quintela
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 37/56] postcopy: ram_enable_notify to switch on userfault Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 38/56] Postcopy: Postcopy startup in migration thread Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 39/56] Postcopy: End of iteration Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 40/56] Page request: Add MIG_RP_MSG_REQ_PAGES reverse command Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 41/56] Page request: Process incoming page request Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 42/56] Page request: Consume pages off the post-copy queue Dr. David Alan Gilbert (git)
2015-11-09 11:18 ` Juan Quintela
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 43/56] postcopy_ram.c: place_page and helpers Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 44/56] Postcopy: Use helpers to map pages during migration Dr. David Alan Gilbert (git)
2015-11-09 11:19 ` Juan Quintela
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 45/56] postcopy: Check order of received target pages Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 46/56] Don't sync dirty bitmaps in postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 47/56] Don't iterate on precopy-only devices during postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 48/56] Host page!=target page: Cleanup bitmaps Dr. David Alan Gilbert (git)
2015-11-09 11:22 ` Juan Quintela
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 49/56] Round up RAMBlock sizes to host page sizes Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 50/56] Postcopy; Handle userfault requests Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 51/56] Start up a postcopy/listener thread ready for incoming page data Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 52/56] postcopy: Wire up loadvm_postcopy_handle_ commands Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 53/56] Postcopy: Mark nohugepage before discard Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 54/56] End of migration for postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 55/56] Disable mlock around incoming postcopy Dr. David Alan Gilbert (git)
2015-11-05 18:11 ` [Qemu-devel] [PATCH v9 56/56] Inhibit ballooning during postcopy Dr. David Alan Gilbert (git)
2015-11-06 3:48 ` [Qemu-devel] [PATCH v9 00/56] Postcopy implementation Bharata B Rao
2015-11-06 9:09 ` Dr. David Alan Gilbert
2015-11-06 11:06 ` Bharata B Rao
2015-11-06 12:22 ` Dr. David Alan Gilbert
2015-11-06 13:43 ` Dr. David Alan Gilbert [this message]
2015-11-06 15:33 ` Bharata B Rao
2015-11-06 15:48 ` Dr. David Alan Gilbert
2015-11-09 3:21 ` Bharata B Rao
2015-11-09 9:08 ` Dr. David Alan Gilbert
2015-11-09 10:28 ` Bharata B Rao
2015-11-09 11:03 ` Dr. David Alan Gilbert
2015-11-09 12:39 ` Bharata B Rao
2015-11-09 12:52 ` Dr. David Alan Gilbert
2015-11-09 4:13 ` David Gibson
2015-11-09 9:05 ` Paolo Bonzini
2015-11-09 16:02 ` Juan Quintela
2015-11-09 16:17 ` Dr. David Alan Gilbert
2016-01-27 11:54 ` Vladimir Sementsov-Ogievskiy
2016-01-27 12:42 ` Dr. David Alan Gilbert
2016-01-27 14:47 ` Vladimir Sementsov-Ogievskiy
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=20151106134341.GG2459@work-vm \
--to=dgilbert@redhat.com \
--cc=aarcange@redhat.com \
--cc=amit.shah@redhat.com \
--cc=bharata.rao@gmail.com \
--cc=bharata@linux.vnet.ibm.com \
--cc=david@gibson.dropbear.id.au \
--cc=liang.z.li@intel.com \
--cc=luis@cs.umu.se \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=yamahata@private.email.ne.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.