[PATCH v4 3/3] qemu: Introduce qemuDomainGetStatsCpuHaltPollTime

Yang Fei yangfei85 at huawei.com
Thu Jul 22 08:05:02 UTC 2021


This function add halt polling time interface in domstats. So that
we can use command 'virsh domstats VM' to get the data if system
support.

Signed-off-by: Yang Fei <yangfei85 at huawei.com>
---
 docs/manpages/virsh.rst |  4 ++++
 src/libvirt-domain.c    |  7 +++++++
 src/qemu/qemu_driver.c  | 20 ++++++++++++++++++++
 3 files changed, 31 insertions(+)

diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index 87668f2b9a..20936994ce 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -2260,6 +2260,10 @@ When selecting the *--state* group the following fields are returned:
 * ``cpu.time`` - total cpu time spent for this domain in nanoseconds
 * ``cpu.user`` - user cpu time spent in nanoseconds
 * ``cpu.system`` - system cpu time spent in nanoseconds
+* ``cpu.haltpoll.success.time`` - cpu halt polling success time spent in
+  nanoseconds
+* ``cpu.haltpoll.fail.time`` - cpu halt polling fail time spent in
+  nanoseconds
 * ``cpu.cache.monitor.count`` - the number of cache monitors for this
   domain
 * ``cpu.cache.monitor.<num>.name`` - the name of cache monitor <num>
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 35c0df0ebc..4eb14d4176 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -11625,6 +11625,13 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
  *     "cpu.user" - user cpu time spent in nanoseconds as unsigned long long.
  *     "cpu.system" - system cpu time spent in nanoseconds as unsigned long
  *                    long.
+ *     "cpu.haltpoll.success.time" - halt-polling cpu usage about the VCPU polled
+ *                                   until a virtual interrupt was delivered in
+ *                                   nanoseconds as unsigned long long.
+ *     "cpu.haltpoll.fail.time" - halt-polling cpu usage about the VCPU had to schedule
+ *                                out (either because the maximum poll time was reached
+ *                                or it needed to yield the CPU) in nanoseconds as
+ *                                unsigned long long.
  *     "cpu.cache.monitor.count" - the number of cache monitors for this domain
  *     "cpu.cache.monitor.<num>.name" - the name of cache monitor <num>
  *     "cpu.cache.monitor.<num>.vcpus" - vcpu list of cache monitor <num>
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 521063d438..79308b7157 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17857,6 +17857,23 @@ qemuDomainGetStatsCpuCgroup(virDomainObj *dom,
     return 0;
 }
 
+static int
+qemuDomainGetStatsCpuHaltPollTime(virDomainObj *dom,
+                                  virTypedParamList *params)
+{
+    unsigned long long haltPollSuccess = 0;
+    unsigned long long haltPollFail = 0;
+    pid_t pid = dom->pid;
+
+    if (virHostCPUGetHaltPollTime(pid, &haltPollSuccess, &haltPollFail) < 0)
+        return 0;
+
+    if (virTypedParamListAddULLong(params, haltPollSuccess, "cpu.haltpoll.success.time") < 0 ||
+        virTypedParamListAddULLong(params, haltPollFail, "cpu.haltpoll.fail.time") < 0)
+        return -1;
+
+    return 0;
+}
 
 static int
 qemuDomainGetStatsCpu(virQEMUDriver *driver,
@@ -17870,6 +17887,9 @@ qemuDomainGetStatsCpu(virQEMUDriver *driver,
     if (qemuDomainGetStatsCpuCache(driver, dom, params) < 0)
         return -1;
 
+    if (qemuDomainGetStatsCpuHaltPollTime(dom, params) < 0)
+        return -1;
+
     return 0;
 }
 
-- 
2.23.0





More information about the libvir-list mailing list