Hi,
I'm sorry for late reply.
On Tue, 19 Apr 2011 11:48:55 +0100
"Daniel P. Berrange" <berrange(a)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(a)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(a)mxm.nes.nec.co.jp>