[libvirt] [PATCH 1/2] lib: Introduce API for retrieving bulk domain stats
Li Wei
lw at cn.fujitsu.com
Tue Aug 26 08:13:41 UTC 2014
On 08/26/2014 03:43 PM, Peter Krempa wrote:
> On 08/26/14 03:45, Li Wei wrote:
>>
>>
>> On 08/26/2014 01:05 AM, Peter Krempa wrote:
>>> The motivation for this API is that management layers that use libvirt
>>> usually poll for statistics using various split up APIs we currently
>>> provide. To get all the necessary stuff, the app needs to issue a lot of
>>> calls and agregate the results.
>>>
>>> The APIs I'm introducing here:
>>> 1) Returns data in a format that we can expand in the future and is
>>> (pseudo) hierarchical. The data is returned as typed parameters where
>>> the fields are constructed as dot-separated strings containing names and
>>> other stuff in a list of typed params.
>>>
>>> 2) Stats for multiple (all) domains can be queried at once and are
>>> returned in one call. This will allow to decrease the overhead necessary
>>> to issue multiple calls per domain multiplied by the count of domains.
>>>
>>> 3) Selectable (bit mask) fields in the returned format. This will allow
>>> to retrieve only specific stats according to the apps need.
>>>
>>> The stats groups will be enabled using a bit field @stats passed as the
>>> function argument. A few sample stats groups that this API will support:
>>>
>>> VIR_DOMAIN_STATS_STATE
>>> VIR_DOMAIN_STATS_CPU
>>> VIR_DOMAIN_STATS_BLOCK
>>> VIR_DOMAIN_STATS_INTERFACE
>>>
>>> the returned typed params will use the following scheme
>>>
>>> state.state = running
>>> state.reason = started
>>> cpu.count = 8
>>> cpu.0.state = running
>>> cpu.0.time = 1234
>>> ---
>>> include/libvirt/libvirt.h.in | 26 +++++++
>>> src/driver.h | 9 +++
>>> src/libvirt.c | 179 +++++++++++++++++++++++++++++++++++++++++++
>>> src/libvirt_public.syms | 7 ++
>>> 4 files changed, 221 insertions(+)
>>>
>>> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
>>> index 47ea695..962f740 100644
>>> --- a/include/libvirt/libvirt.h.in
>>> +++ b/include/libvirt/libvirt.h.in
>>> @@ -2501,6 +2501,32 @@ int virDomainDetachDeviceFlags(virDomainPtr domain,
>>> int virDomainUpdateDeviceFlags(virDomainPtr domain,
>>> const char *xml, unsigned int flags);
>>>
>>> +typedef struct _virDomainStatsRecord virDomainStatsRecord;
>>> +typedef virDomainStatsRecord *virDomainStatsRecordPtr;
>>> +struct _virDomainStatsRecord {
>>> + virDomainPtr dom;
>>> + unsigned int nparams;
>>> + virTypedParameterPtr params;
>>> +};
>>> +
>>> +typedef enum {
>>> + VIR_DOMAIN_STATS_ALL = (1 << 0), /* return all stats fields
>>> + implemented in the daemon */
>>
>> Why not define VIR_DOMAIN_STATS_ALL as the bitwise or of each other
>> individual VIR_DOMAIN_STATS_XXX so we no need to make a special path
>> for VIR_DOMAIN_STATS_ALL in the implementation?
>
> This will allow us to separately return everything the daemon supports
> and still allow the caller to be notified if one of the requested stats
> fields isn't supported.
Don't understand this very well, did you mean with
VIR_DOMAIN_STATS_ALL | VIR_DOMAIN_STATS_BLOCK
libvirt will return an error if VIR_DOMAIN_STATS_BLOCK not supported?
not sure if this scenario is useful.
Thanks
>
> Peter
>
>
More information about the libvir-list
mailing list