On Wed, Mar 02, 2016 at 12:42:23PM +0100, Jiri Denemark wrote:
From: Cristian Klein <cristiklein(a)gmail.com>
To use post-copy one has to start the migration with
VIR_MIGRATE_POSTCOPY flag and, while migration is in progress, call
virDomainMigrateStartPostCopy() to switch from pre-copy to post-copy.
Signed-off-by: Cristian Klein <cristiklein(a)gmail.com>
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
Notes:
Version 3:
- VIR_DOMAIN_EVENT_SUSPENDED_POSTCOPY_FAILED will only be emitted on
the destination host
Version 2:
- POSTCOPY_AFTER_PRECOPY flag removed
[...]
@@ -9165,6 +9200,96 @@ virDomainMigrateGetMaxSpeed(virDomainPtr
domain,
/**
+ * virDomainMigrateStartPostCopy:
+ * @domain: a domain object
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Starts post-copy migration. This function has to be called while
+ * migration (initiated with VIR_MIGRATE_POSTCOPY flag) is in progress.
+ *
+ * Traditional post-copy migration iteratively walks through guest memory
s/post-copy/pre-copy/
+ * pages and migrates those that changed since the previous
iteration. The
+ * iterative phase stops when the number of dirty pages is low enough so that
+ * the virtual CPUs can be paused, all dirty pages transferred to the
+ * destination, where the virtual CPUs are unpaused, and all this can happen
+ * within a predefined downtime period. It's clear that this process may never
+ * converge if downtime is too short and/or the guest keeps changing a lot of
+ * memory pages.
+ *
[...]
@@ -725,4 +725,8 @@ LIBVIRT_1.2.19 {
virDomainRename;
} LIBVIRT_1.2.17;
+LIBVIRT_1.3.2 {
+ virDomainMigrateStartPostCopy;
+} LIBVIRT_1.2.19;
+
There should be 1.3.3 and all other cases also uses global:, but I'm not sure
how this works :)
Pavel