[libvirt] [PATCHv3 3/6] virNodeGetCPUTime: Implement public API

Minoru Usui usui at mxm.nes.nec.co.jp
Thu Apr 14 10:10:07 UTC 2011


virNodeGetCPUTime: Implement public API

Signed-off-by: Minoru Usui <usui at mxm.nes.nec.co.jp>
---
 src/libvirt.c |   79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/src/libvirt.c b/src/libvirt.c
index 0da9885..12d666d 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -14,6 +14,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <strings.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -4229,6 +4230,84 @@ error:
 }
 
 /**
+ * virNodeGetCpuTime:
+ * @stats: nr_stats-sized array of unsigned long long (returned)
+ * @nr_stats: number of cpu time statistics requested of the node.
+ * @flags: an OR'ed set of virNodeGetCpuTimeFlags
+ *
+ * This function provides cpu time statistics of the node.
+ *
+ * Up to 'nr_stats' elements of 'stats' will be populated with cpu
+ * time statistics of the node. Only statistics requested by the user
+ * will be returned.
+ * -1 will be returned, if requested statistics isn't supported by
+ * the driver or this version of libvirt.
+ *
+ * Cpu time Statistics(@flags):
+ *
+ * VIR_NODE_CPU_TIME_KERNEL:
+ *     The cumulative CPU time which spends by kernel,
+ *     when the node booting up.(nanoseconds)
+ * VIR_NODE_CPU_TIME_USER:
+ *     The cumulative CPU time which spends by user processes,
+ *     when the node booting up.(nanoseconds)
+ * VIR_NODE_CPU_TIME_IDLE:
+ *     The cumulative idle CPU time, when the node booting up.(nanoseconds)
+ * VIR_NODE_CPU_TIME_IOWAIT:
+ *     The cumulative I/O wait CPU time, when the node booting up.(nanoseconds)
+ * VIR_NODE_CPU_TIME_UTILIZATION:
+ *     The CPU utilization. The usage value is in percent and 100%
+ *     represents all CPUs on the server.
+ *
+ * Returns: The number of stats provided or -1 in case of failure.
+ */
+int virNodeGetCpuTime (virConnectPtr conn, unsigned long long *stats,
+                          unsigned int nr_stats, unsigned int flags)
+{
+    unsigned long nr_stats_ret = 0;
+    unsigned int req_type;
+    int req_count = 0;
+
+    VIR_DEBUG("conn=%p, stats=%p, nr_stats=%u", conn, stats, nr_stats);
+
+    virResetLastError();
+
+    if (!VIR_IS_CONNECT (conn)) {
+        virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
+        virDispatchError(NULL);
+        return 0;
+    }
+
+    if (!stats || nr_stats == 0)
+        return 0;
+
+    req_type = flags & VIR_NODE_CPU_TIME_MASK;
+    while (req_type) {
+        int bit_index;
+
+        req_count++;
+        bit_index = ffs(req_type);
+        req_type &= ~(1 << (bit_index - 1));
+    }
+
+    if (nr_stats > req_count)
+        nr_stats = req_count;
+
+    if (conn->driver->nodeGetCpuTime) {
+        nr_stats_ret = conn->driver->nodeGetCpuTime (conn, stats, nr_stats, flags);
+        if (nr_stats_ret == -1)
+            goto error;
+        return nr_stats_ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(conn);
+    return -1;
+}
+
+/**
  * virNodeGetFreeMemory:
  * @conn: pointer to the hypervisor connection
  *
-- 
1.7.1

-- 
Minoru Usui <usui at mxm.nes.nec.co.jp>




More information about the libvir-list mailing list