Hi, Daniel, Matthias Thank you for your comments. On Mon, 4 Apr 2011 14:30:32 +0200 Matthias Bolte <matthias.bolte@xxxxxxxxxxxxxx> wrote: > 2011/4/4 Daniel P. Berrange <berrange@xxxxxxxxxx>: > > On Mon, Apr 04, 2011 at 11:03:10AM +0900, Minoru Usui wrote: > >> Hi, Matthias. > >> > >> On Fri, 1 Apr 2011 20:22:17 +0200 > >> Matthias Bolte <matthias.bolte@xxxxxxxxxxxxxx> wrote: > >> > >> > 2011/4/1 Eric Blake <eblake@xxxxxxxxxx>: > >> > > 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? > > > > The fact that there is the question of what is the right interval > > demonstrates the inherant flaw in such an API design. Providing > > the raw absolute time allows an app much more flexiblity in how > > they work with the data, avoiding the need for such policies in > > libvirt. > > > >>  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? > > > > IMHO we don't really want libvirtd to be constantly polling & calculating > > this data, at least not unless an application is currently asking for it. > > I think we want this API to have the style that is like the current > > virDomainMemoryStats ÂAPI. Then, we can define a set of parameters that > > can be fetched, allowing each parameter to be optional > > > > eg > > > > Âenum { > >   VIR_NODE_CPU_TIME_KERNEL, > >   VIR_NODE_CPU_TIME_USER, > >   VIR_NODE_CPU_TIME_IDLE, > >   VIR_NODE_CPU_TIME_IOWAIT, > >   VIR_NODE_CPU_TIME_UTILIZATION, > > Â}; > > > > For QEMU we'd provide the first 4 values, allowing apps maximum > > flexibility in how they calculate utilization over different time > > periods. For VMWare we'd provide only the last value. > > > > An app like virt-manager, can display UTILIZATION value directly if > > that is present, otherwise it will be able to calculate data from > > the other times as it does now for domains. So it would work with > > both QEMU and VMWare, to the best of its abilities. > > > > Regards, > > Daniel > > > > For ESX the driver doesn't even need to calculate a usage/utilization > value, because the ESX server already does this on it's own and the > driver can just ask for it. The usage value is in percent and 100% > represents all CPUs on the server. > > I like that approach. > > Matthias OK. I'll change the user I/F to above one. -- Minoru Usui <usui@xxxxxxxxxxxxxxxxx> -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list