migration/dirtyrate: adjust order of registering thread

registering get_dirtyrate thread in advance so that both
page-sampling and dirty-ring mode can be covered.

Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
Message-Id: <d7727581a8e86d4a42fc3eacf7f310419b9ebf7e.1624040308.git.huangy81@chinatelecom.cn>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Hyman Huang(黄勇) 2021-06-29 16:01:21 +00:00 committed by Juan Quintela
parent 71864eadd9
commit 15eb2d644c

View File

@ -352,7 +352,6 @@ static void calculate_dirtyrate(struct DirtyRateConfig config)
int64_t msec = 0; int64_t msec = 0;
int64_t initial_time; int64_t initial_time;
rcu_register_thread();
rcu_read_lock(); rcu_read_lock();
initial_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); initial_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
if (!record_ramblock_hash_info(&block_dinfo, config, &block_count)) { if (!record_ramblock_hash_info(&block_dinfo, config, &block_count)) {
@ -375,7 +374,6 @@ static void calculate_dirtyrate(struct DirtyRateConfig config)
out: out:
rcu_read_unlock(); rcu_read_unlock();
free_ramblock_dirty_info(block_dinfo, block_count); free_ramblock_dirty_info(block_dinfo, block_count);
rcu_unregister_thread();
} }
void *get_dirtyrate_thread(void *arg) void *get_dirtyrate_thread(void *arg)
@ -383,6 +381,7 @@ void *get_dirtyrate_thread(void *arg)
struct DirtyRateConfig config = *(struct DirtyRateConfig *)arg; struct DirtyRateConfig config = *(struct DirtyRateConfig *)arg;
int ret; int ret;
int64_t start_time; int64_t start_time;
rcu_register_thread();
ret = dirtyrate_set_state(&CalculatingState, DIRTY_RATE_STATUS_UNSTARTED, ret = dirtyrate_set_state(&CalculatingState, DIRTY_RATE_STATUS_UNSTARTED,
DIRTY_RATE_STATUS_MEASURING); DIRTY_RATE_STATUS_MEASURING);
@ -401,6 +400,8 @@ void *get_dirtyrate_thread(void *arg)
if (ret == -1) { if (ret == -1) {
error_report("change dirtyrate state failed."); error_report("change dirtyrate state failed.");
} }
rcu_unregister_thread();
return NULL; return NULL;
} }