Hi, Matthias.
On Fri, 1 Apr 2011 20:22:17 +0200
Matthias Bolte <matthias.bolte(a)googlemail.com> wrote:
2011/4/1 Eric Blake <eblake(a)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(a)mxm.nes.nec.co.jp>