[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 06/20] migration/dirtyrate: move init step of calculation to main
From: |
Juan Quintela |
Subject: |
[PULL 06/20] migration/dirtyrate: move init step of calculation to main thread |
Date: |
Mon, 1 Nov 2021 23:08:58 +0100 |
From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
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>
---
migration/dirtyrate.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c
index a9bdd60034..b8f61cc650 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);
}
--
2.33.1
- [PULL 00/20] Migration 20211031 patches, Juan Quintela, 2021/11/01
- [PULL 02/20] KVM: introduce dirty_pages and kvm_dirty_ring_enabled, Juan Quintela, 2021/11/01
- [PULL 01/20] migration/rdma: Fix out of order wrid, Juan Quintela, 2021/11/01
- [PULL 04/20] migration/dirtyrate: introduce struct and adjust DirtyRateStat, Juan Quintela, 2021/11/01
- [PULL 05/20] migration/dirtyrate: adjust order of registering thread, Juan Quintela, 2021/11/01
- [PULL 03/20] memory: make global_dirty_tracking a bitmask, Juan Quintela, 2021/11/01
- [PULL 06/20] migration/dirtyrate: move init step of calculation to main thread,
Juan Quintela <=
- [PULL 08/20] migration: Make migration blocker work for snapshots too, Juan Quintela, 2021/11/01
- [PULL 09/20] migration: Add migrate_add_blocker_internal(), Juan Quintela, 2021/11/01
- [PULL 10/20] dump-guest-memory: Block live migration, Juan Quintela, 2021/11/01
- [PULL 11/20] memory: Introduce replay_discarded callback for RamDiscardManager, Juan Quintela, 2021/11/01
- [PULL 12/20] virtio-mem: Implement replay_discarded RamDiscardManager callback, Juan Quintela, 2021/11/01
- [PULL 13/20] migration/ram: Handle RAMBlocks with a RamDiscardManager on the migration source, Juan Quintela, 2021/11/01
- [PULL 14/20] virtio-mem: Drop precopy notifier, Juan Quintela, 2021/11/01
- [PULL 18/20] migration/ram: Handle RAMBlocks with a RamDiscardManager on background snapshots, Juan Quintela, 2021/11/01
- [PULL 07/20] migration/dirtyrate: implement dirty-ring dirtyrate calculation, Juan Quintela, 2021/11/01