From: Peter Xu Date: Fri, 13 Jun 2025 14:12:10 +0000 (-0400) Subject: migration/postcopy: Add blocktime fault counts per-vcpu X-Git-Tag: v10.1.0-rc0~25^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=271a1940e91a32fab6165841279f250204f53ae4;p=thirdparty%2Fqemu.git migration/postcopy: Add blocktime fault counts per-vcpu Add a field to count how many remote faults one vCPU has taken. So far it's still not used, but will be soon. Reviewed-by: Fabiano Rosas Link: https://lore.kernel.org/r/20250613141217.474825-8-peterx@redhat.com Signed-off-by: Peter Xu Signed-off-by: Fabiano Rosas --- diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index 9dfa92a62d..15ea106910 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -116,6 +116,8 @@ typedef struct PostcopyBlocktimeContext { uint64_t *vcpu_blocktime_start; /* blocktime per vCPU */ uint64_t *vcpu_blocktime_total; + /* count of faults per vCPU */ + uint64_t *vcpu_faults_count; /* page address per vCPU */ uintptr_t *vcpu_addr; /* total blocktime when all vCPUs are stopped */ @@ -136,6 +138,7 @@ static void destroy_blocktime_context(struct PostcopyBlocktimeContext *ctx) { g_free(ctx->vcpu_blocktime_start); g_free(ctx->vcpu_blocktime_total); + g_free(ctx->vcpu_faults_count); g_free(ctx->vcpu_addr); g_free(ctx); } @@ -155,6 +158,7 @@ static struct PostcopyBlocktimeContext *blocktime_context_new(void) ctx->vcpu_blocktime_start = g_new0(uint64_t, smp_cpus); ctx->vcpu_blocktime_total = g_new0(uint64_t, smp_cpus); + ctx->vcpu_faults_count = g_new0(uint64_t, smp_cpus); ctx->vcpu_addr = g_new0(uintptr_t, smp_cpus); ctx->exit_notifier.notify = migration_exit_cb; qemu_add_exit_notifier(&ctx->exit_notifier); @@ -857,6 +861,7 @@ void mark_postcopy_blocktime_begin(uintptr_t addr, uint32_t ptid, dc->last_begin = current; dc->vcpu_blocktime_start[cpu] = current; dc->vcpu_addr[cpu] = addr; + dc->vcpu_faults_count[cpu]++; /* * The caller should only inject a blocktime entry when the page is