[libvirt] [PATCH 1/6] virNodeGetCpuTime: Expose new API

Minoru Usui usui at mxm.nes.nec.co.jp
Mon Apr 4 02:03:10 UTC 2011


Hi, Matthias.

On Fri, 1 Apr 2011 20:22:17 +0200
Matthias Bolte <matthias.bolte at googlemail.com> wrote:

> 2011/4/1 Eric Blake <eblake at redhat.com>:
> > On 03/31/2011 07:55 PM, Minoru Usui wrote:
> >> virNodeGetCpuTime: Expose new API
> >>
> >>  include/libvirt/libvirt.h.in |   26 ++++++++++++++++++++++++++
> >>  src/libvirt_public.syms      |    1 +
> >>  2 files changed, 27 insertions(+), 0 deletions(-)
> >
> >>
> >> +/**
> >> + * virNodeCpuTime:
> >> + *
> >> + * a virNodeCpuTime is a structure filled by virNodeGetCpuTime() and providing
> >> + * the information for the cpu time of Node.
> >> + */
> >> +
> >> +typedef struct _virNodeCpuTime virNodeCpuTime;
> >> +
> >> +struct _virNodeCpuTime {
> >> +    unsigned long long user;
> >> +    unsigned long long system;
> >> +    unsigned long long idle;
> >> +    unsigned long long iowait;
> >> +};
> >
> > Can we portably get all of this information on Windows?  If not, how do
> > you express which values we don't know how to obtain?
> >
> 
> In the context of ESX I vote against this absolute CPU time values.
> ESX provides this values relative to a 20 second timeslots with 1 hour
> of history. This makes it nearly impossible to obtain the absolute CPU
> time. The same problem already exists for the domain's virtual CPU
> time.
> 
> When you look at virt-top's usage of the domain's virtual CPU time,
> you see that it actually doesn't really care about the absolute value,
> but deduces the CPU utilization from it. I suggest that we find a
> different representation for this information that is not by
> definition impossible to implement for ESX.
> 
> Matthias

I didn't know ESX couldn't return absolute CPU time value.
Thank you for your comment.

We really want to get CPU utilization information of the node, not 
absolute CPU time values.
But linux doesn't provide CPU utilization directly, 
so my patch returns absolute CPU time values, 
and CPU utilization is calculated by client which uses new API.

To return CPU utilization by new API, I think there are two issues of implementing on linux.

  a) How much interval does calculate CPU utilization?
     To calculate CPU utilization on linux, we need to get absolute CPU time value of the node
     from /proc/stat two times.
     How much interval properly? 1sec? 1min? or others?

  b) Can new API wait its interval?
     If we select simply implementation, new API waits its interval.
     But API user don't want to wait every API calls, if its interval is long.
     So I think libvirtd will be calculating CPU utilization in background every interval.
     Is this approach OK?

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




More information about the libvir-list mailing list