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:
parent
71864eadd9
commit
15eb2d644c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user