
Hi, I'm sorry for late reply. On Tue, 19 Apr 2011 11:48:55 +0100 "Daniel P. Berrange" <berrange@redhat.com> wrote:
On Fri, Apr 08, 2011 at 08:33:12PM +0900, Minoru Usui wrote:
virNodeGetCPUTime: Expose new API
Signed-off-by: Minoru Usui <usui@mxm.nes.nec.co.jp> --- include/libvirt/libvirt.h.in | 64 ++++++++++++++++++++++++++++++++++++++++++ src/libvirt_public.syms | 5 +++ 2 files changed, 69 insertions(+), 0 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index bd36015..154c138 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -228,6 +228,57 @@ struct _virNodeInfo { unsigned int threads;/* number of threads per core */ };
+/** + * virNodeCpuTime: + * + * a virNodeCpuTime is a structure filled by virNodeGetCpuTime() and providing + * the information for the cpu time of the node. + */ + +/** + * Cpu Time Statistics Tags: + */ +typedef enum { + /* + * The cumulative CPU time which spends by kernel, + * when the node booting up.(in nanoseconds). + */ + VIR_NODE_CPU_TIME_KERNEL = 0, + /* + * The cumulative CPU time which spends by user processes, + * when the node booting up.(in nanoseconds). + */ + VIR_NODE_CPU_TIME_USER = 1, + /* + * The cumulative idle CPU time, + * when the node booting up.(in nanoseconds). + */ + VIR_NODE_CPU_TIME_IDLE = 2, + /* + * The cumulative I/O wait CPU time, + * when the node booting up.(in nanoseconds). + */ + VIR_NODE_CPU_TIME_IOWAIT = 3, + /* + * The CPU utilization. + * The usage value is in percent and 100% represents all CPUs on + * the server. + */ + VIR_NODE_CPU_TIME_UTILIZATION = 4, + + /* + * The number of statistics supported by this version of the interface. + * To add new statistics, add them to the enum and increase this value. + */ + VIR_NODE_CPU_TIME_NR = 5, +} virNodeCpuTimeTags; + +typedef struct _virNodeCpuTime virNodeCpuTime; + +struct _virNodeCpuTime { + virNodeCpuTimeTags tag; + unsigned long long val; +};
I've just remembered that the virSchedParameter, virMemoryParameter and virBlkioParameter structs all use a string to represent the data value, rather than an enum. I wonder if we ought todo the same here.
eg, something like
#define VIR_NODE_CPUE_FIELD_LENGTH 80
struct _virNodeCpuParameter { char field[VIR_NODE_CPU_FIELD_LENGTH] unsigned long long value; };
They also have a union for returning different data types, beyond just 'unsigned long long' but I think that might be overkill here.
I implemented this based on virDomainMemoryStats(). Is it better that the patches is based on virDomainGetMemoryParameters()/BlkioParameters()? If so, I'll rebase these patch series. -- Minoru Usui <usui@mxm.nes.nec.co.jp>