migration: Optimization about wait-unplug migration state
qemu_savevm_nr_failover_devices() is originally designed to get the number of failover devices, but it actually returns the number of "unplug-pending" failover devices now. Moreover, what drives migration state to wait-unplug should be the number of "unplug-pending" failover devices, not all failover devices. We can also notice that qemu_savevm_state_guest_unplug_pending() and qemu_savevm_nr_failover_devices() is equivalent almost (from the code view). So the latter is incorrect semantically and useless, just delete it. In the qemu_savevm_state_guest_unplug_pending(), once hit a unplug-pending failover device, then it can return true right now to save cpu time. Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Tested-by: Jens Freimann <jfreimann@redhat.com> Reviewed-by: Jens Freimann <jfreimann@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
8958338b10
commit
d05de9e39a
@ -3341,7 +3341,7 @@ static void *migration_thread(void *opaque)
|
|||||||
|
|
||||||
qemu_savevm_state_setup(s->to_dst_file);
|
qemu_savevm_state_setup(s->to_dst_file);
|
||||||
|
|
||||||
if (qemu_savevm_nr_failover_devices()) {
|
if (qemu_savevm_state_guest_unplug_pending()) {
|
||||||
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
|
migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
|
||||||
MIGRATION_STATUS_WAIT_UNPLUG);
|
MIGRATION_STATUS_WAIT_UNPLUG);
|
||||||
|
|
||||||
|
@ -1140,36 +1140,18 @@ void qemu_savevm_state_header(QEMUFile *f)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemu_savevm_nr_failover_devices(void)
|
bool qemu_savevm_state_guest_unplug_pending(void)
|
||||||
{
|
{
|
||||||
SaveStateEntry *se;
|
SaveStateEntry *se;
|
||||||
int n = 0;
|
|
||||||
|
|
||||||
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
|
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
|
||||||
if (se->vmsd && se->vmsd->dev_unplug_pending &&
|
if (se->vmsd && se->vmsd->dev_unplug_pending &&
|
||||||
se->vmsd->dev_unplug_pending(se->opaque)) {
|
se->vmsd->dev_unplug_pending(se->opaque)) {
|
||||||
n++;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
bool qemu_savevm_state_guest_unplug_pending(void)
|
|
||||||
{
|
|
||||||
SaveStateEntry *se;
|
|
||||||
int n = 0;
|
|
||||||
|
|
||||||
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
|
|
||||||
if (!se->vmsd || !se->vmsd->dev_unplug_pending) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (se->vmsd->dev_unplug_pending(se->opaque)) {
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return n > 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_savevm_state_setup(QEMUFile *f)
|
void qemu_savevm_state_setup(QEMUFile *f)
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
bool qemu_savevm_state_blocked(Error **errp);
|
bool qemu_savevm_state_blocked(Error **errp);
|
||||||
void qemu_savevm_state_setup(QEMUFile *f);
|
void qemu_savevm_state_setup(QEMUFile *f);
|
||||||
int qemu_savevm_nr_failover_devices(void);
|
|
||||||
bool qemu_savevm_state_guest_unplug_pending(void);
|
bool qemu_savevm_state_guest_unplug_pending(void);
|
||||||
int qemu_savevm_state_resume_prepare(MigrationState *s);
|
int qemu_savevm_state_resume_prepare(MigrationState *s);
|
||||||
void qemu_savevm_state_header(QEMUFile *f);
|
void qemu_savevm_state_header(QEMUFile *f);
|
||||||
|
Loading…
Reference in New Issue
Block a user