mirror of https://github.com/xemu-project/xemu.git
migration/dirtyrate: use QEMU_CLOCK_HOST to report start-time
Currently query-dirty-rate uses QEMU_CLOCK_REALTIME as the source for start-time field. This translates to clock_gettime(CLOCK_MONOTONIC), i.e. number of seconds since host boot. This is not very useful. The only reasonable use case of start-time I can imagine is to check whether previously completed measurements are too old or not. But this makes sense only if start-time is reported as host wall-clock time. This patch replaces source of start-time from QEMU_CLOCK_REALTIME to QEMU_CLOCK_HOST. Signed-off-by: Andrei Gudkov <gudkov.andrei@huawei.com> Reviewed-by: Hyman Huang <yong.huang@smartx.com> Message-Id: <399861531e3b24a1ecea2ba453fb2c3d129fb03a.1693905328.git.gudkov.andrei@huawei.com> Signed-off-by: Hyman Huang <yong.huang@smartx.com>
This commit is contained in:
parent
34a68001f1
commit
320a6ccc76
|
@ -293,11 +293,10 @@ query_dirty_rate_info(TimeUnit calc_time_unit)
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_dirtyrate_stat(int64_t start_time,
|
static void init_dirtyrate_stat(struct DirtyRateConfig config)
|
||||||
struct DirtyRateConfig config)
|
|
||||||
{
|
{
|
||||||
DirtyStat.dirty_rate = -1;
|
DirtyStat.dirty_rate = -1;
|
||||||
DirtyStat.start_time = start_time;
|
DirtyStat.start_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) / 1000;
|
||||||
DirtyStat.calc_time_ms = config.calc_time_ms;
|
DirtyStat.calc_time_ms = config.calc_time_ms;
|
||||||
DirtyStat.sample_pages = config.sample_pages_per_gigabytes;
|
DirtyStat.sample_pages = config.sample_pages_per_gigabytes;
|
||||||
|
|
||||||
|
@ -633,7 +632,7 @@ static void calculate_dirtyrate_dirty_bitmap(struct DirtyRateConfig config)
|
||||||
record_dirtypages_bitmap(&dirty_pages, true);
|
record_dirtypages_bitmap(&dirty_pages, true);
|
||||||
|
|
||||||
start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
|
start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
|
||||||
DirtyStat.start_time = start_time / 1000;
|
DirtyStat.start_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) / 1000;
|
||||||
|
|
||||||
DirtyStat.calc_time_ms = dirty_stat_wait(config.calc_time_ms, start_time);
|
DirtyStat.calc_time_ms = dirty_stat_wait(config.calc_time_ms, start_time);
|
||||||
|
|
||||||
|
@ -659,7 +658,7 @@ static void calculate_dirtyrate_dirty_ring(struct DirtyRateConfig config)
|
||||||
/* start log sync */
|
/* start log sync */
|
||||||
global_dirty_log_change(GLOBAL_DIRTY_DIRTY_RATE, true);
|
global_dirty_log_change(GLOBAL_DIRTY_DIRTY_RATE, true);
|
||||||
|
|
||||||
DirtyStat.start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000;
|
DirtyStat.start_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) / 1000;
|
||||||
|
|
||||||
/* calculate vcpu dirtyrate */
|
/* calculate vcpu dirtyrate */
|
||||||
DirtyStat.calc_time_ms = vcpu_calculate_dirtyrate(config.calc_time_ms,
|
DirtyStat.calc_time_ms = vcpu_calculate_dirtyrate(config.calc_time_ms,
|
||||||
|
@ -685,6 +684,7 @@ static void calculate_dirtyrate_sample_vm(struct DirtyRateConfig config)
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
initial_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
|
initial_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
|
||||||
|
DirtyStat.start_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) / 1000;
|
||||||
if (!record_ramblock_hash_info(&block_dinfo, config, &block_count)) {
|
if (!record_ramblock_hash_info(&block_dinfo, config, &block_count)) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -692,7 +692,6 @@ static void calculate_dirtyrate_sample_vm(struct DirtyRateConfig config)
|
||||||
|
|
||||||
DirtyStat.calc_time_ms = dirty_stat_wait(config.calc_time_ms,
|
DirtyStat.calc_time_ms = dirty_stat_wait(config.calc_time_ms,
|
||||||
initial_time);
|
initial_time);
|
||||||
DirtyStat.start_time = initial_time / 1000;
|
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
if (!compare_page_hash_info(block_dinfo, block_count)) {
|
if (!compare_page_hash_info(block_dinfo, block_count)) {
|
||||||
|
@ -756,7 +755,6 @@ void qmp_calc_dirty_rate(int64_t calc_time,
|
||||||
static struct DirtyRateConfig config;
|
static struct DirtyRateConfig config;
|
||||||
QemuThread thread;
|
QemuThread thread;
|
||||||
int ret;
|
int ret;
|
||||||
int64_t start_time;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the dirty rate is already being measured, don't attempt to start.
|
* If the dirty rate is already being measured, don't attempt to start.
|
||||||
|
@ -833,8 +831,7 @@ void qmp_calc_dirty_rate(int64_t calc_time,
|
||||||
**/
|
**/
|
||||||
dirtyrate_mode = mode;
|
dirtyrate_mode = mode;
|
||||||
|
|
||||||
start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000;
|
init_dirtyrate_stat(config);
|
||||||
init_dirtyrate_stat(start_time, config);
|
|
||||||
|
|
||||||
qemu_thread_create(&thread, "get_dirtyrate", get_dirtyrate_thread,
|
qemu_thread_create(&thread, "get_dirtyrate", get_dirtyrate_thread,
|
||||||
(void *)&config, QEMU_THREAD_DETACHED);
|
(void *)&config, QEMU_THREAD_DETACHED);
|
||||||
|
|
|
@ -1974,13 +1974,13 @@
|
||||||
# 1. Measurement is in progress:
|
# 1. Measurement is in progress:
|
||||||
#
|
#
|
||||||
# <- {"status": "measuring", "sample-pages": 512,
|
# <- {"status": "measuring", "sample-pages": 512,
|
||||||
# "mode": "page-sampling", "start-time": 3665220, "calc-time": 10,
|
# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
|
||||||
# "calc-time-unit": "second"}
|
# "calc-time-unit": "second"}
|
||||||
#
|
#
|
||||||
# 2. Measurement has been completed:
|
# 2. Measurement has been completed:
|
||||||
#
|
#
|
||||||
# <- {"status": "measured", "sample-pages": 512, "dirty-rate": 108,
|
# <- {"status": "measured", "sample-pages": 512, "dirty-rate": 108,
|
||||||
# "mode": "page-sampling", "start-time": 3665220, "calc-time": 10,
|
# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
|
||||||
# "calc-time-unit": "second"}
|
# "calc-time-unit": "second"}
|
||||||
##
|
##
|
||||||
{ 'command': 'query-dirty-rate', 'data': {'*calc-time-unit': 'TimeUnit' },
|
{ 'command': 'query-dirty-rate', 'data': {'*calc-time-unit': 'TimeUnit' },
|
||||||
|
|
Loading…
Reference in New Issue