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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list