diff options
author | Hyman Huang(黄勇) <huangy81@chinatelecom.cn> | 2021-06-29 16:01:22 +0000 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2021-11-01 22:56:43 +0100 |
commit | 9865d0f68fbb4785fcc80d5a28fece8913f4098a (patch) | |
tree | 26d4f4290b7550da1337d5d9c92c0ec25bcaeda0 | |
parent | 15eb2d644cbda3dd2ad5989e273b211e83c16623 (diff) | |
download | qemu-9865d0f68fbb4785fcc80d5a28fece8913f4098a.zip qemu-9865d0f68fbb4785fcc80d5a28fece8913f4098a.tar.gz qemu-9865d0f68fbb4785fcc80d5a28fece8913f4098a.tar.bz2 |
migration/dirtyrate: move init step of calculation to main thread
since main thread may "query dirty rate" at any time, it's better
to move init step into main thead so that synchronization overhead
between "main" and "get_dirtyrate" can be reduced.
Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
Message-Id: <109f8077518ed2f13068e3bfb10e625e964780f1.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>
-rw-r--r-- | migration/dirtyrate.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c index a9bdd60..b8f61cc 100644 --- a/migration/dirtyrate.c +++ b/migration/dirtyrate.c @@ -380,7 +380,6 @@ void *get_dirtyrate_thread(void *arg) { struct DirtyRateConfig config = *(struct DirtyRateConfig *)arg; int ret; - int64_t start_time; rcu_register_thread(); ret = dirtyrate_set_state(&CalculatingState, DIRTY_RATE_STATUS_UNSTARTED, @@ -390,9 +389,6 @@ void *get_dirtyrate_thread(void *arg) return NULL; } - start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000; - init_dirtyrate_stat(start_time, config); - calculate_dirtyrate(config); ret = dirtyrate_set_state(&CalculatingState, DIRTY_RATE_STATUS_MEASURING, @@ -411,6 +407,7 @@ void qmp_calc_dirty_rate(int64_t calc_time, bool has_sample_pages, static struct DirtyRateConfig config; QemuThread thread; int ret; + int64_t start_time; /* * If the dirty rate is already being measured, don't attempt to start. @@ -451,6 +448,10 @@ void qmp_calc_dirty_rate(int64_t calc_time, bool has_sample_pages, config.sample_period_seconds = calc_time; config.sample_pages_per_gigabytes = sample_pages; config.mode = DIRTY_RATE_MEASURE_MODE_PAGE_SAMPLING; + + start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000; + init_dirtyrate_stat(start_time, config); + qemu_thread_create(&thread, "get_dirtyrate", get_dirtyrate_thread, (void *)&config, QEMU_THREAD_DETACHED); } |