mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 09:13:55 -06:00
migration: Add the framework of multi-thread compression
Add the code to create and destroy the multiple threads those will be used to do data compression. Left some functions empty to keep clearness, and the code will be added later. Signed-off-by: Liang Li <liang.z.li@intel.com> Signed-off-by: Yang Zhang <yang.z.zhang@intel.com> Reviewed-by: Dr.David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
263170e679
commit
8706d2d566
3 changed files with 137 additions and 2 deletions
|
@ -33,6 +33,11 @@
|
|||
#define BUFFER_DELAY 100
|
||||
#define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
|
||||
|
||||
/* Default compression thread count */
|
||||
#define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
|
||||
/*0: means nocompress, 1: best speed, ... 9: best compress ratio */
|
||||
#define DEFAULT_MIGRATE_COMPRESS_LEVEL 1
|
||||
|
||||
/* Migration XBZRLE default cache size */
|
||||
#define DEFAULT_MIGRATE_CACHE_SIZE (64 * 1024 * 1024)
|
||||
|
||||
|
@ -52,6 +57,8 @@ MigrationState *migrate_get_current(void)
|
|||
.bandwidth_limit = MAX_THROTTLE,
|
||||
.xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE,
|
||||
.mbps = -1,
|
||||
.compress_thread_count = DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT,
|
||||
.compress_level = DEFAULT_MIGRATE_COMPRESS_LEVEL,
|
||||
};
|
||||
|
||||
return ¤t_migration;
|
||||
|
@ -305,6 +312,7 @@ static void migrate_fd_cleanup(void *opaque)
|
|||
qemu_thread_join(&s->thread);
|
||||
qemu_mutex_lock_iothread();
|
||||
|
||||
migrate_compress_threads_join();
|
||||
qemu_fclose(s->file);
|
||||
s->file = NULL;
|
||||
}
|
||||
|
@ -390,6 +398,8 @@ static MigrationState *migrate_init(const MigrationParams *params)
|
|||
int64_t bandwidth_limit = s->bandwidth_limit;
|
||||
bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
|
||||
int64_t xbzrle_cache_size = s->xbzrle_cache_size;
|
||||
int compress_level = s->compress_level;
|
||||
int compress_thread_count = s->compress_thread_count;
|
||||
|
||||
memcpy(enabled_capabilities, s->enabled_capabilities,
|
||||
sizeof(enabled_capabilities));
|
||||
|
@ -400,6 +410,8 @@ static MigrationState *migrate_init(const MigrationParams *params)
|
|||
sizeof(enabled_capabilities));
|
||||
s->xbzrle_cache_size = xbzrle_cache_size;
|
||||
|
||||
s->compress_level = compress_level;
|
||||
s->compress_thread_count = compress_thread_count;
|
||||
s->bandwidth_limit = bandwidth_limit;
|
||||
s->state = MIGRATION_STATUS_SETUP;
|
||||
trace_migrate_set_state(MIGRATION_STATUS_SETUP);
|
||||
|
@ -587,6 +599,30 @@ bool migrate_zero_blocks(void)
|
|||
return s->enabled_capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
|
||||
}
|
||||
|
||||
bool migrate_use_compression(void)
|
||||
{
|
||||
/* Disable compression before the patch series are applied */
|
||||
return false;
|
||||
}
|
||||
|
||||
int migrate_compress_level(void)
|
||||
{
|
||||
MigrationState *s;
|
||||
|
||||
s = migrate_get_current();
|
||||
|
||||
return s->compress_level;
|
||||
}
|
||||
|
||||
int migrate_compress_threads(void)
|
||||
{
|
||||
MigrationState *s;
|
||||
|
||||
s = migrate_get_current();
|
||||
|
||||
return s->compress_thread_count;
|
||||
}
|
||||
|
||||
int migrate_use_xbzrle(void)
|
||||
{
|
||||
MigrationState *s;
|
||||
|
@ -730,6 +766,7 @@ void migrate_fd_connect(MigrationState *s)
|
|||
/* Notify before starting migration thread */
|
||||
notifier_list_notify(&migration_state_notifiers, s);
|
||||
|
||||
migrate_compress_threads_create();
|
||||
qemu_thread_create(&s->thread, "migration", migration_thread, s,
|
||||
QEMU_THREAD_JOINABLE);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue