migration: Add dirty_pages_rate to query migrate output
It indicates how many pages were dirtied during the last second. Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
c6bf8e0e0c
commit
8d017193e2
18
arch_init.c
18
arch_init.c
@ -369,6 +369,14 @@ static void migration_bitmap_sync(void)
|
||||
RAMBlock *block;
|
||||
ram_addr_t addr;
|
||||
uint64_t num_dirty_pages_init = migration_dirty_pages;
|
||||
MigrationState *s = migrate_get_current();
|
||||
static int64_t start_time;
|
||||
static int64_t num_dirty_pages_period;
|
||||
int64_t end_time;
|
||||
|
||||
if (!start_time) {
|
||||
start_time = qemu_get_clock_ms(rt_clock);
|
||||
}
|
||||
|
||||
trace_migration_bitmap_sync_start();
|
||||
memory_global_sync_dirty_bitmap(get_system_memory());
|
||||
@ -385,6 +393,16 @@ static void migration_bitmap_sync(void)
|
||||
}
|
||||
trace_migration_bitmap_sync_end(migration_dirty_pages
|
||||
- num_dirty_pages_init);
|
||||
num_dirty_pages_period += migration_dirty_pages - num_dirty_pages_init;
|
||||
end_time = qemu_get_clock_ms(rt_clock);
|
||||
|
||||
/* more than 1 second = 1000 millisecons */
|
||||
if (end_time > start_time + 1000) {
|
||||
s->dirty_pages_rate = num_dirty_pages_period * 1000
|
||||
/ (end_time - start_time);
|
||||
start_time = end_time;
|
||||
num_dirty_pages_period = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
4
hmp.c
4
hmp.c
@ -175,6 +175,10 @@ void hmp_info_migrate(Monitor *mon)
|
||||
info->ram->normal);
|
||||
monitor_printf(mon, "normal bytes: %" PRIu64 " kbytes\n",
|
||||
info->ram->normal_bytes >> 10);
|
||||
if (info->ram->dirty_pages_rate) {
|
||||
monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n",
|
||||
info->ram->dirty_pages_rate);
|
||||
}
|
||||
}
|
||||
|
||||
if (info->has_disk) {
|
||||
|
@ -180,6 +180,8 @@ MigrationInfo *qmp_query_migrate(Error **errp)
|
||||
info->ram->duplicate = dup_mig_pages_transferred();
|
||||
info->ram->normal = norm_mig_pages_transferred();
|
||||
info->ram->normal_bytes = norm_mig_bytes_transferred();
|
||||
info->ram->dirty_pages_rate = s->dirty_pages_rate;
|
||||
|
||||
|
||||
if (blk_mig_active()) {
|
||||
info->has_disk = true;
|
||||
|
@ -42,6 +42,7 @@ struct MigrationState
|
||||
int64_t total_time;
|
||||
int64_t downtime;
|
||||
int64_t expected_downtime;
|
||||
int64_t dirty_pages_rate;
|
||||
bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
|
||||
int64_t xbzrle_cache_size;
|
||||
};
|
||||
|
@ -383,13 +383,17 @@
|
||||
#
|
||||
# @normal : number of normal pages (since 1.2)
|
||||
#
|
||||
# @normal-bytes : number of normal bytes sent (since 1.2)
|
||||
# @normal-bytes: number of normal bytes sent (since 1.2)
|
||||
#
|
||||
# @dirty-pages-rate: number of pages dirtied by second by the
|
||||
# guest (since 1.3)
|
||||
#
|
||||
# Since: 0.14.0
|
||||
##
|
||||
{ 'type': 'MigrationStats',
|
||||
'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
|
||||
'duplicate': 'int', 'normal': 'int', 'normal-bytes': 'int' } }
|
||||
'duplicate': 'int', 'normal': 'int', 'normal-bytes': 'int',
|
||||
'dirty-pages-rate' : 'int' } }
|
||||
|
||||
##
|
||||
# @XBZRLECacheStats
|
||||
|
Loading…
Reference in New Issue
Block a user