]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Introduce qemuDomainGetStatsCpuHaltPollTime
authorYang Fei <yangfei85@huawei.com>
Thu, 22 Jul 2021 08:05:02 +0000 (16:05 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 27 Jul 2021 08:29:25 +0000 (10:29 +0200)
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@huawei.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
docs/manpages/virsh.rst
src/libvirt-domain.c
src/qemu/qemu_driver.c

index 87668f2b9a47b5cf2ca7cfd9ff8f9ace9e65e42e..20936994ce060c4a17289bbee4efc04768e553f4 100644 (file)
@@ -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>
index 35c0df0ebcb1adc4ac259e9c54de19ec657c1542..4eb14d4176cd32f958f614500f18aecc99e32ef4 100644 (file)
@@ -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>
index a2663283ba2d12a00f190233c508b4bb3cf72ba9..0b35bbc15cfe4f3fddba5a46969ea5936fc644a7 100644 (file)
@@ -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;
 }