diff options
| author | Juan Quintela <quintela@redhat.com> | 2022-10-03 02:00:03 +0200 |
|---|---|---|
| committer | Juan Quintela <quintela@redhat.com> | 2023-02-06 19:22:56 +0100 |
| commit | c8df4a7aeffcb46020f610526eea621fa5b0cd47 (patch) | |
| tree | ac98cf649da17c85020015bfe7632c8c9b153685 /migration/migration.c | |
| parent | 255dc7af7e65588d36319129718ddfdfeabac898 (diff) | |
| download | focaccia-qemu-c8df4a7aeffcb46020f610526eea621fa5b0cd47.tar.gz focaccia-qemu-c8df4a7aeffcb46020f610526eea621fa5b0cd47.zip | |
migration: Split save_live_pending() into state_pending_*
We split the function into to: - state_pending_estimate: We estimate the remaining state size without stopping the machine. - state pending_exact: We calculate the exact amount of remaining state. The only "device" that implements different functions for _estimate() and _exact() is ram. Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'migration/migration.c')
| -rw-r--r-- | migration/migration.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/migration/migration.c b/migration/migration.c index 5e2c891845..877a6f7011 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -3778,15 +3778,23 @@ typedef enum { */ static MigIterateState migration_iteration_run(MigrationState *s) { - uint64_t pending_size, pend_pre, pend_compat, pend_post; + uint64_t pend_pre, pend_compat, pend_post; bool in_postcopy = s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE; - qemu_savevm_state_pending(s->threshold_size, &pend_pre, - &pend_compat, &pend_post); - pending_size = pend_pre + pend_compat + pend_post; + qemu_savevm_state_pending_estimate(s->threshold_size, &pend_pre, + &pend_compat, &pend_post); + uint64_t pending_size = pend_pre + pend_compat + pend_post; - trace_migrate_pending(pending_size, s->threshold_size, - pend_pre, pend_compat, pend_post); + trace_migrate_pending_estimate(pending_size, s->threshold_size, + pend_pre, pend_compat, pend_post); + + if (pend_pre + pend_compat <= s->threshold_size) { + qemu_savevm_state_pending_exact(s->threshold_size, &pend_pre, + &pend_compat, &pend_post); + pending_size = pend_pre + pend_compat + pend_post; + trace_migrate_pending_exact(pending_size, s->threshold_size, + pend_pre, pend_compat, pend_post); + } if (pending_size && pending_size >= s->threshold_size) { /* Still a significant amount to transfer */ |