> 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
