On 04/20/2011 11:38 PM, Christian Benvenuti (benve) wrote:
On 04/20/2011 05:28 PM, Christian Benvenuti (benve) wrote:
Daniel,
I looked at the patch-set you sent out on the 2/9/11
[PATCH 0/6] Introduce a new migration protocol
to QEMU driver
http://www.mail-archive.com/libvir-list@xxxxxxxxxx/msg33223.html
What is the status of this new migration protocol?
Is there any pending issue blocking its integration?
I would like to propose an RFC enhancement to the migration
algorithm.
Here is a quick summary of the proposal/idea.
- finer control on migration result
- possibility of specifying what features cannot fail
their initialization on the dst host during migration.
Migration should not succeed if any of them fails.
- optional: each one of those features should be able to
provide a deinit function to cleanup resources
on the dst host if migration fails.
This functionality would come useful for the (NIC) set port
profile feature VDP (802.1Qbg/1Qbh), but what I propose is
a generic config option / API that can be used by any feature.
And now the details.
----------------------------------------------
enhancement: finer control on migration result
----------------------------------------------
There are different reasons why a VM may need (or be forced) to
migrate.
You can classify the types of the migrations also based on
different semantics.
For simplicity I'll classify them into two categories, based on
how important it is for the VM to migrate as fast as possible:
(1) It IS important
In this case, whether the VM will not be able to (temporary)
make use of certain resources (for example the network) on the
dst host, is not that important, because the completion of the
migration is considered higher priority.
A possible scenario could be a server that must migrate ASAP
because of a disaster/emergency.
(2) It IS NOT important
I can think of a VM whose applications/servers need a network
connection in order to work properly. Loosing such network
connectivity as a consequence of a migration would not be
acceptable (or highly undesirable).
Given the case (2) above, I have a comment about the Finish
step, with regards to the port profile (VDP) codepath.
The call to
qemuMigrationVPAssociatePortProfile
in
qemuMigrationFinish
can fail, but its result (success or failure) does not influence
the result of the migration Finish step (it was already like this
in migration V2).
I *believe* the underlying problem is Qemu's switch-over. Once Qemu
decides that the migration was successful, Qemu on the source side
dies
and continues running on the destination side. I don't think there are
more handshakes foreseen with higher layers that this could be
reversed
or the switch-over delayed, but correct me if I am wrong...
Actually I think this is not what happens in migration V3.
My understanding is this:
- the qemu cmdline built by Libvirt on the dst host during Prepare3
includes the "-S" option (ie no autostart)
- the VM on the dst host does not start running until libvirt
calls qemuProcessStartCPUs in the Finish3 step.
This fn simply sends the "-cont" cmd to the monitor to
start the VM/CPUs.
That's correct, but it's doing this already in v2. The non-autostart
(-S) corresponds to Qemu's autostart here (migration.c):
void process_incoming_migration(QEMUFile *f)
{
if (qemu_loadvm_state(f) < 0) {
fprintf(stderr, "load of migration failed\n");
exit(0);
}
qemu_announce_self();
DPRINTF("successfully loaded vm state\n");
incoming_expected = false;
if (autostart)
vm_start();
}
and simply doesn't start the VM. After this function is called all
sockets are closed and the communication with the source host is cut. I
don't think it allows for fall-back at this point.
Rather we may need a 'wait' option for migration and before the
qemu_put_byte(f, QEMU_VM_EOF);
in qemu_savevm_state_complete() sync with the monitor and either wait
for something like migrate_finish or migrate_cancel.
Regards,
Stefan
--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list