Hi, I'm sorry for late reply. On Tue, 19 Apr 2011 11:48:55 +0100 "Daniel P. Berrange" <berrange@xxxxxxxxxx> wrote: > On Fri, Apr 08, 2011 at 08:33:12PM +0900, Minoru Usui wrote: > > virNodeGetCPUTime: Expose new API > > > > Signed-off-by: Minoru Usui <usui@xxxxxxxxxxxxxxxxx> > > --- > > 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@xxxxxxxxxxxxxxxxx> -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list