Daniel P. Berrangé <berra...@redhat.com> wrote: > There are 27 pre-copy live migration scenarios being tested. In all of > these we force non-convergance and run for one iteration, then let it > converge and wait for completion during the second (or following) > iterations. At 3 mbps bandwidth limit the first iteration takes a very > long time (~30 seconds). > > While it is important to test the migration passes and convergance > logic, it is overkill to do this for all 27 pre-copy scenarios. The > TLS migration scenarios in particular are merely exercising different > code paths during connection establishment. > > To optimize time taken, switch most of the test scenarios to run > non-live (ie guest CPUs paused) with no bandwidth limits. This gives > a massive speed up for most of the test scenarios. > > For test coverage the following scenarios are unchanged > > * Precopy with UNIX sockets > * Precopy with UNIX sockets and dirty ring tracking > * Precopy with XBZRLE > * Precopy with multifd
Just for completeness: the other test that is still slow is /migration/vcpu_dirty_limit. > - migrate_ensure_non_converge(from); > + if (args->live) { > + migrate_ensure_non_converge(from); > + } else { > + migrate_ensure_converge(from); > + } Looks ... weird? But the only way that I can think of improving it is to pass args to migrate_ensure_*() and that is a different kind of weird. > } else { > - if (args->iterations) { > - while (args->iterations--) { > + if (args->live) { > + if (args->iterations) { > + while (args->iterations--) { > + wait_for_migration_pass(from); > + } > + } else { > wait_for_migration_pass(from); > } > + > + migrate_ensure_converge(from); I think we should change iterations to be 1 when we create args, but otherwise, treat 0 as 1 and change it to something in the lines of: if (args->live) { while (args->iterations-- >= 0) { wait_for_migration_pass(from); } migrate_ensure_converge(from); What do you think? > - qtest_qmp_eventwait(to, "RESUME"); > + if (!args->live) { > + qtest_qmp_discard_response(to, "{ 'execute' : 'cont'}"); > + } > + if (!got_resume) { > + qtest_qmp_eventwait(to, "RESUME"); > + } > > wait_for_serial("dest_serial"); > } I was looking at the "culprit" of Lukas problem, and it is not directly obvious. I see that when we expect one event, we just drop any event that we are not interested in. I don't know if that is the proper behaviour or if that is what affecting this test. Later, Juan.