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 <tejus.gk@nutanix.com>
---
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