Message ID | 1443515898-3594-24-git-send-email-dgilbert@redhat.com |
---|---|
State | New |
Headers | show |
On 09/29/2015 02:37 AM, Dr. David Alan Gilbert (git) wrote: > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > The 'postcopy ram' capability allows postcopy migration of RAM; > note that the migration starts off in precopy mode until > postcopy mode is triggered (see the migrate_start_postcopy > patch later in the series). > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > Reviewed-by: Juan Quintela <quintela@redhat.com> > Reviewed-by: Amit Shah <amit.shah@redhat.com> > --- > include/migration/migration.h | 1 + > migration/migration.c | 23 +++++++++++++++++++++++ > qapi-schema.json | 6 +++++- > 3 files changed, 29 insertions(+), 1 deletion(-) Reviewed-by: Eric Blake <eblake@redhat.com> I'm guessing the plan is to keep this experimental until a bit more experience is gained, to make sure we aren't missing anything essential in the use of postcopy. > { 'enum': 'MigrationCapability', > 'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks', > - 'compress', 'events'] } > + 'compress', 'events', 'x-postcopy-ram'] }
On (Tue) 29 Sep 2015 [14:22:17], Eric Blake wrote: > On 09/29/2015 02:37 AM, Dr. David Alan Gilbert (git) wrote: > > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > > > The 'postcopy ram' capability allows postcopy migration of RAM; > > note that the migration starts off in precopy mode until > > postcopy mode is triggered (see the migrate_start_postcopy > > patch later in the series). > > > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > > Reviewed-by: Juan Quintela <quintela@redhat.com> > > Reviewed-by: Amit Shah <amit.shah@redhat.com> > > --- > > include/migration/migration.h | 1 + > > migration/migration.c | 23 +++++++++++++++++++++++ > > qapi-schema.json | 6 +++++- > > 3 files changed, 29 insertions(+), 1 deletion(-) > > Reviewed-by: Eric Blake <eblake@redhat.com> > > I'm guessing the plan is to keep this experimental until a bit more > experience is gained, to make sure we aren't missing anything essential > in the use of postcopy. From the cover letter: I'm keeping the x- for now, until the libvirt interface gets finalised. I expect, though, that we'll merge this series in 2.5, and remove the x- before the 2.5 release. My main concern of the Linux interface being not released in a stable release will be satisfied with the 4.3 kernel release. Any concerns from the libvirt side? Amit
On 09/30/2015 01:00 AM, Amit Shah wrote: >> Reviewed-by: Eric Blake <eblake@redhat.com> >> >> I'm guessing the plan is to keep this experimental until a bit more >> experience is gained, to make sure we aren't missing anything essential >> in the use of postcopy. > >>From the cover letter: > > I'm keeping the x- for now, until the libvirt interface gets finalised. > > I expect, though, that we'll merge this series in 2.5, and remove the > x- before the 2.5 release. My main concern of the Linux interface > being not released in a stable release will be satisfied with the 4.3 > kernel release. > > Any concerns from the libvirt side? No, that should be fine. The libvirt side won't push the commit until the x- is gone, but there's nothing stopping us from developing the interface in parallel while x- is still present to prove that the design will work.
diff --git a/include/migration/migration.h b/include/migration/migration.h index 3dc95f4..4ed7931 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -186,6 +186,7 @@ void migrate_add_blocker(Error *reason); */ void migrate_del_blocker(Error *reason); +bool migrate_postcopy_ram(void); bool migrate_zero_blocks(void); bool migrate_auto_converge(void); diff --git a/migration/migration.c b/migration/migration.c index 6691a28..23bdad3 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -551,6 +551,20 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params, for (cap = params; cap; cap = cap->next) { s->enabled_capabilities[cap->value->capability] = cap->value->state; } + + if (migrate_postcopy_ram()) { + if (migrate_use_compression()) { + /* The decompression threads asynchronously write into RAM + * rather than use the atomic copies needed to avoid + * userfaulting. It should be possible to fix the decompression + * threads for compatibility in future. + */ + error_report("Postcopy is not currently compatible with " + "compression"); + s->enabled_capabilities[MIGRATION_CAPABILITY_X_POSTCOPY_RAM] = + false; + } + } } void qmp_migrate_set_parameters(bool has_compress_level, @@ -901,6 +915,15 @@ void qmp_migrate_set_downtime(double value, Error **errp) max_downtime = (uint64_t)value; } +bool migrate_postcopy_ram(void) +{ + MigrationState *s; + + s = migrate_get_current(); + + return s->enabled_capabilities[MIGRATION_CAPABILITY_X_POSTCOPY_RAM]; +} + bool migrate_auto_converge(void) { MigrationState *s; diff --git a/qapi-schema.json b/qapi-schema.json index 527690d..c6f1942 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -535,11 +535,15 @@ # @auto-converge: If enabled, QEMU will automatically throttle down the guest # to speed up convergence of RAM migration. (since 1.6) # +# @x-postcopy-ram: Start executing on the migration target before all of RAM has +# been migrated, pulling the remaining pages along as needed. NOTE: If +# the migration fails during postcopy the VM will fail. (since 2.5) +# # Since: 1.2 ## { 'enum': 'MigrationCapability', 'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks', - 'compress', 'events'] } + 'compress', 'events', 'x-postcopy-ram'] } ## # @MigrationCapabilityStatus