> On 3 Oct 2025, at 10:59 PM, Tejus GK <[email protected]> wrote:
> 
> QEMU can report how many times a zerocopy send got deferred during a
> live migration with VIR_MIGRATE_ZEROCOPY enabled. Support the stat in
> libvirt as part of virDomainGetJobStats
> 
> Signed-off-by: Tejus GK <[email protected]>
> ---
> include/libvirt/libvirt-domain.h | 9 +++++++++
> src/qemu/qemu_domainjob.c        | 6 ++++++
> src/qemu/qemu_monitor.h          | 1 +
> src/qemu/qemu_monitor_json.c     | 2 ++
> 4 files changed, 18 insertions(+)
> 
> diff --git a/include/libvirt/libvirt-domain.h 
> b/include/libvirt/libvirt-domain.h
> index 71bb49fe6c..2959f692bb 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -5842,6 +5842,15 @@ typedef enum {
>  */
> # define VIR_DOMAIN_JOB_VFIO_DATA_TRANSFERRED "vfio_data_transferred"
> 
> +/**
> + * VIR_DOMAIN_JOB_MEMORY_MISSED_ZERO_COPY:
> + * virDomainGetJobStats field: number of times zerocopy send failed
> + * during a live migration, as VIR_TYPED_PARAM_ULLONG.
> + *
> + * Since: 11.9.0
> + */
> +# define VIR_DOMAIN_JOB_MEMORY_MISSED_ZERO_COPY "memory_missed_zero_copy"
> +
> /**
>  * virConnectDomainEventGenericCallback:
>  * @conn: the connection pointer
> diff --git a/src/qemu/qemu_domainjob.c b/src/qemu/qemu_domainjob.c
> index afea1ea57a..61441888e9 100644
> --- a/src/qemu/qemu_domainjob.c
> +++ b/src/qemu/qemu_domainjob.c
> @@ -420,6 +420,12 @@ qemuDomainMigrationJobDataToParams(virDomainJobData 
> *jobData,
>                                 stats->vfio_data_transferred) < 0)
>         goto error;
> 
> +    if (stats->ram_missed_zero_copy &&
> +        virTypedParamsAddULLong(&par, &npar, &maxpar,
> +                                VIR_DOMAIN_JOB_MEMORY_MISSED_ZERO_COPY,
> +                                stats->ram_missed_zero_copy) < 0)
> +        goto error;
> +
>  done:
>     *type = virDomainJobStatusToType(jobData->status);
>     *params = par;
> diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
> index 8ef85ceb0a..90e6efaf09 100644
> --- a/src/qemu/qemu_monitor.h
> +++ b/src/qemu/qemu_monitor.h
> @@ -838,6 +838,7 @@ struct _qemuMonitorMigrationStats {
>     unsigned long long ram_page_size;
>     unsigned long long ram_iteration;
>     unsigned long long ram_postcopy_reqs;
> +    unsigned long long ram_missed_zero_copy;
> 
>     unsigned long long disk_transferred;
>     unsigned long long disk_remaining;
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 9caade7bc9..2b418d6cad 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -3129,6 +3129,8 @@ qemuMonitorJSONGetMigrationStatsReply(virJSONValue 
> *reply,
>                                                           
> &stats->ram_iteration));
>             ignore_value(virJSONValueObjectGetNumberUlong(ram, 
> "postcopy-requests",
>                                                           
> &stats->ram_postcopy_reqs));
> +            ignore_value(virJSONValueObjectGetNumberUlong(ram, 
> "dirty-sync-missed-zero-copy",
> +                                                          
> &stats->ram_missed_zero_copy));
>         }
> 
>         disk = virJSONValueObjectGetObject(ret, "disk");
> -- 
> 2.43.7
> 

ping, for reviews.

regards,
Tejus

Reply via email to