> On Thu, Mar 03, 2016 at 06:44:28PM +0800, Liang Li wrote: > > Get the free pages information through virtio and filter out the free > > pages in the ram bulk stage. This can significantly reduce the total > > live migration time as well as network traffic. > > > > Signed-off-by: Liang Li <liang.z.li@xxxxxxxxx> > > --- > > migration/ram.c | 52 > > ++++++++++++++++++++++++++++++++++++++++++++++------ > > 1 file changed, 46 insertions(+), 6 deletions(-) > > > @@ -1945,6 +1971,20 @@ static int ram_save_setup(QEMUFile *f, void > *opaque) > > DIRTY_MEMORY_MIGRATION); > > } > > memory_global_dirty_log_start(); > > + > > + if (balloon_free_pages_support() && > > + balloon_get_free_pages(migration_bitmap_rcu->free_pages_bmap, > > + &free_pages_count) == 0) { > > + qemu_mutex_unlock_iothread(); > > + while (balloon_get_free_pages(migration_bitmap_rcu- > >free_pages_bmap, > > + &free_pages_count) == 0) { > > + usleep(1000); > > + } > > + qemu_mutex_lock_iothread(); > > + > > + filter_out_guest_free_pages(migration_bitmap_rcu- > >free_pages_bmap); > > + } > > IIUC, this code is synchronous wrt to the guest OS balloon drive. ie it is asking > the geust for free pages and waiting for a response. If the guest OS has > crashed this is going to mean QEMU waits forever and thus migration won't > complete. Similarly you need to consider that the guest OS may be malicious > and simply never respond. > > So if the migration code is going to use the guest balloon driver to get info > about free pages it has to be done in an asynchronous manner so that > migration can never be stalled by a slow/crashed/malicious guest driver. > > Regards, > Daniel Really, thanks a lot! Liang ��.n��������+%������w��{.n�����o�^n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�