[libvirt] [PATCHv2 3/6] virNodeGetCPUTime: Implement public API
Minoru Usui
usui at mxm.nes.nec.co.jp
Wed Apr 27 05:09:13 UTC 2011
On Tue, 19 Apr 2011 11:53:31 +0100
"Daniel P. Berrange" <berrange at redhat.com> wrote:
> On Fri, Apr 08, 2011 at 08:35:12PM +0900, Minoru Usui wrote:
> > virNodeGetCPUTime: Implement public API
> >
> > Signed-off-by: Minoru Usui <usui at mxm.nes.nec.co.jp>
> > ---
> > src/libvirt.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 files changed, 70 insertions(+), 0 deletions(-)
> >
> > diff --git a/src/libvirt.c b/src/libvirt.c
> > index 8be18d4..a65bfc6 100644
> > --- a/src/libvirt.c
> > +++ b/src/libvirt.c
> > @@ -4260,6 +4260,76 @@ error:
> > }
> >
> > /**
> > + * virNodeGetCpuTime:
> > + * @stats: nr_stats-sized array of stat structures (returned)
> > + * @nr_stats: number of cpu time statistics requested of the node.
> > + * @flags: unused, always pass 0
> > + *
> > + * This function provides cpu time statistics of the node.
> > + *
> > + * Up to 'nr_stats' elements of 'stats' will be populated with cpu time statistics
> > + * of the node. Only statistics supported by the driver, and this version of
> > + * libvirt will be returned.
> > + *
> > + * Cpu time Statistics:
> > + *
> > + * VIR_NODE_CPU_TIME_KERNEL:
> > + * The cumulative CPU time which spends by kernel,
> > + * when the node booting up.(nanoseconds)
> > + * VIR_NODE_CPU_TIME_USER:
> > + * The cumulative CPU time which spends by user processes,
> > + * when the node booting up.(nanoseconds)
> > + * VIR_NODE_CPU_TIME_IDLE:
> > + * The cumulative idle CPU time, when the node booting up.(nanoseconds)
> > + * VIR_NODE_CPU_TIME_IOWAIT:
> > + * The cumulative I/O wait CPU time, when the node booting up.(nanoseconds)
> > + * VIR_NODE_CPU_TIME_UTILIZATION:
> > + * The CPU utilization. The usage value is in percent and 100%
> > + * represents all CPUs on the server.
> > + *
> > + * Returns: The number of stats provided or -1 in case of failure.
> > + */
> > +int virNodeGetCpuTime (virConnectPtr conn, virNodeCpuTimePtr stats,
> > + unsigned int nr_stats, unsigned int flags)
> > +{
> > + unsigned long nr_stats_ret = 0;
>
> This ought to have been an 'int' to match the function return
> type, and better to declare it later in the block where it was
> first used.
Ouch. I'll change it.
> > +
> > + VIR_DEBUG("conn=%p, stats=%p, nr_stats=%u", conn, stats, nr_stats);
> > +
> > + virResetLastError();
> > +
> > + if (!VIR_IS_CONNECT (conn)) {
> > + virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
> > + virDispatchError(NULL);
> > + return 0;
> > + }
> > +
> > + if (flags != 0) {
> > + virLibConnError(VIR_ERR_INVALID_ARG, _("flags must be zero"));
> > + goto error;
> > + }
>
> Instead of this, use the standard macro we have:
>
> virCheckFlags(flags, 0);
OK. I'll change it.
> > + if (!stats || nr_stats == 0)
> > + return 0;
> > +
> > + if (nr_stats > VIR_NODE_CPU_TIME_NR)
> > + nr_stats = VIR_NODE_CPU_TIME_NR;
>
> If we're following the pattern of virDomainGetMemoryParameters/BlkioParameters
> then we should have passed in a pointer to nr_stats. It would be allowed to
> be zero, in which case the hypervisor would initialize it with the required
> size for the number of parameters.
>
> eg, the signature would be
>
> int
> virNodeGetCpuParameters(virConnectPtr conn,
> virNodeCpuParameterPtr params,
> int *nparams, unsigned int flags)
>
> and then check
>
> if ((nparams == NULL) || (*nparams < 0)) {
> virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> goto error;
> }
I'll rebase these patches, if it's better to be based on
virDomainGetMemoryParameters()/BlkioParameters()?
> > +
> > + if (conn->driver->nodeGetCpuTime) {
> > + nr_stats_ret = conn->driver->nodeGetCpuTime (conn, stats, nr_stats, flags);
> > + if (nr_stats_ret == -1)
> > + goto error;
> > + return nr_stats_ret;
> > + }
> > +
> > + virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
> > +
> > +error:
> > + virDispatchError(conn);
> > + return -1;
> > +}
> > +
> > +/**
>
>
> Daniel
> --
> |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
> |: http://libvirt.org -o- http://virt-manager.org :|
> |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
> |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
--
Minoru Usui <usui at mxm.nes.nec.co.jp>
More information about the libvir-list
mailing list