From: ChenLiang <chenlian...@huawei.com> expose the counter that log the times of updating the dirty bitmap to end user.
Signed-off-by: ChenLiang <chenlian...@huawei.com> Signed-off-by: Gonglei <arei.gong...@huawei.com> --- arch_init.c | 1 + hmp.c | 2 ++ include/migration/migration.h | 1 + migration.c | 2 ++ qapi-schema.json | 4 +++- qmp-commands.hx | 5 +++++ 6 files changed, 14 insertions(+), 1 deletion(-) diff --git a/arch_init.c b/arch_init.c index 1c1488a..77fb168 100644 --- a/arch_init.c +++ b/arch_init.c @@ -531,6 +531,7 @@ static void migration_bitmap_sync(void) s->dirty_bytes_rate = s->dirty_pages_rate * TARGET_PAGE_SIZE; start_time = end_time; num_dirty_pages_period = 0; + s->dirty_sync_cnt = get_bitmap_sync_cnt(); } } diff --git a/hmp.c b/hmp.c index 2f279c4..843174d 100644 --- a/hmp.c +++ b/hmp.c @@ -188,6 +188,8 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict) info->ram->normal); monitor_printf(mon, "normal bytes: %" PRIu64 " kbytes\n", info->ram->normal_bytes >> 10); + monitor_printf(mon, "dirty sync cnt: %" PRIu64 "\n", + info->ram->dirty_sync_cnt); if (info->ram->dirty_pages_rate) { monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n", info->ram->dirty_pages_rate); diff --git a/include/migration/migration.h b/include/migration/migration.h index 3e1e6c7..a45affd 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -61,6 +61,7 @@ struct MigrationState bool enabled_capabilities[MIGRATION_CAPABILITY_MAX]; int64_t xbzrle_cache_size; int64_t setup_time; + int64_t dirty_sync_cnt; }; void process_incoming_migration(QEMUFile *f); diff --git a/migration.c b/migration.c index 14235b2..4c9bc89 100644 --- a/migration.c +++ b/migration.c @@ -220,6 +220,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) info->ram->normal_bytes = norm_mig_bytes_transferred(); info->ram->dirty_pages_rate = s->dirty_pages_rate; info->ram->mbps = s->mbps; + info->ram->dirty_sync_cnt = s->dirty_sync_cnt; if (blk_mig_active()) { info->has_disk = true; @@ -253,6 +254,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) info->ram->normal = norm_mig_pages_transferred(); info->ram->normal_bytes = norm_mig_bytes_transferred(); info->ram->mbps = s->mbps; + info->ram->dirty_sync_cnt = s->dirty_sync_cnt; break; case MIG_STATE_ERROR: info->has_status = true; diff --git a/qapi-schema.json b/qapi-schema.json index 6c381b7..0bcad54 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -651,13 +651,15 @@ # # @mbps: throughput in megabits/sec. (since 1.6) # +# @dirty-sync-cnt: the times of ram dirty sync (since 1.7) +# # Since: 0.14.0 ## { 'type': 'MigrationStats', 'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' , 'duplicate': 'int', 'skipped': 'int', 'normal': 'int', 'normal-bytes': 'int', 'dirty-pages-rate' : 'int', - 'mbps' : 'number' } } + 'mbps' : 'number', 'dirty-sync-cnt' : 'int' } } ## # @XBZRLECacheStats diff --git a/qmp-commands.hx b/qmp-commands.hx index d982cd6..47fc900 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -2928,6 +2928,7 @@ The main json-object contains the following: pages. This is just normal pages times size of one page, but this way upper levels don't need to care about page size (json-int) + - "dirty-sync-cnt": the times of ram dirty sync (json-int) - "disk": only present if "status" is "active" and it is a block migration, it is a json-object with the following disk information: - "transferred": amount transferred in bytes (json-int) @@ -2966,6 +2967,7 @@ Examples: "duplicate":123, "normal":123, "normal-bytes":123456 + "dirty-sync-cnt":15 } } } @@ -2991,6 +2993,7 @@ Examples: "duplicate":123, "normal":123, "normal-bytes":123456 + "dirty-sync-cnt":15 } } } @@ -3011,6 +3014,7 @@ Examples: "duplicate":123, "normal":123, "normal-bytes":123456 + "dirty-sync-cnt":15 }, "disk":{ "total":20971520, @@ -3037,6 +3041,7 @@ Examples: "duplicate":10, "normal":3333, "normal-bytes":3412992 + "dirty-sync-cnt":15 }, "xbzrle-cache":{ "cache-size":67108864, -- 1.7.12.4