On 18.06.2013 09:11, Liuji (Jeremy) wrote:
Hi all,
I found a problem about the progress's display of migration with non-shared storage.
In the commit: 7b7600b3e6734117b3db39ba5c31ae33a40fb5bb (qemu_migration: Introduce
qemuMigrationDriveMirror),
it use drive mirror instead of block migration. And after the driver mirror, then process
the VM migration(no block).
But only in the VM migration stage, libvirt set the progress of migration(in
qemuMigrationWaitForCompletion).
In the drive mirror stage, libvirt is waiting the completion of drive mirror, and
don't set the progress of migration.
So, the libvirt can't display the progress of migration in the drive mirror stage.
Yes, I've noticed this during my testing of the patches. The problem is
finding the most suitable function F(x,y) to report the overall
progress, where x is the progress of block jobs (drive mirroring), and y
is the progress of memory migration. Moreover, the drive mirroring is
started prior memory migration, so the F() will be called like this:
F(0, 0), F(0.01, 0), ... F(1, 0), F(1, 0.01), ... F(1, 1).
The question is - what progress should be reported for case F(1, 0)?
I think, we can report the appropriate part of the whole migration:
0% = nothing transferred,
100% = mem + disks size,
so F(1, 0) = (disks size)/(mem + disks size)
However, it's slightly more complicated, as we don't know the sum of
disk sizes at the beginning as disks are migrated one by one. That is,
we know the sum after F(1, 0) not before.
As always, patches are welcome :)
Michal