On 2014/11/21 15:38, Li, Liang Z wrote: >>> +int migrate_compress_threads(void) >>> +{ >>> + MigrationState *s; >>> + >>> + s = migrate_get_current(); >>> + >>> + return s->compress_thread_count; >>> +} >>> + >>> int migrate_use_xbzrle(void) >>> { >>> MigrationState *s; >>> @@ -697,4 +795,5 @@ void migrate_fd_connect(MigrationState *s) >>> >>> qemu_thread_create(&s->thread, "migration", migration_thread, s, >>> QEMU_THREAD_JOINABLE); >>> + migrate_compress_threads_create(s); > > >> don't create compress_threads always. >> It may be better: > >> if (!migrate_use_xbzrle()) { >> migrate_compress_threads_create(s); >> } > > Thanks for your comments, in fact, the multiple thread compression can > co-work with xbrzle, which can help to accelerate live migration.
hmm, multiple thread compression can't co-work with xbzrle. xbzrle need guarantee the cache at src is same to dest. But I dont see that below: + /* XBZRLE overflow or normal page */ + if (bytes_sent == -1) { + bytes_sent = migrate_save_block_hdr(¶m->migbuf, block, + offset, cont, RAM_SAVE_FLAG_COMPRESS_PAGE); + blen = migrate_qemu_add_compress(¶m->migbuf, p, + TARGET_PAGE_SIZE, migrate_compress_level()); + bytes_sent += blen; + atomic_inc(&acct_info.norm_pages); the code don't update the cache of xbzrle at src. > >> BTW, this patch is too big to review. Spliting it into some patch will be >> welcome. > > I am doing it. > > > > >