[libvirt] [PATCH] Fix virCgroupGetPercpuStats with non-continuous present CPUs

Ján Tomko jtomko at redhat.com
Thu Jan 22 14:52:41 UTC 2015


On 01/22/2015 03:21 PM, Michal Privoznik wrote:
> On 22.01.2015 12:26, Ján Tomko wrote:
>> Per-cpu stats are only shown for present CPUs in the cgroups,
>> but we were only parsing the largest CPU number from
>> /sys/devices/system/cpu/present and looking for stats even for
>> non-present CPUs.
>> This resulted in:
>> internal error: cpuacct parse error
>> ---
>>  cfg.mk                |  2 +-
>>  src/nodeinfo.c        | 17 +++++++++++++++++
>>  src/nodeinfo.h        |  1 +
>>  src/util/vircgroup.c  | 24 ++++++++++++++++++------
>>  tests/vircgroupmock.c | 44 ++++++++++++++++++++++++++++++++++++++------
>>  tests/vircgrouptest.c | 47 +++++++++++++++++++++++++++++++++++------------
>>  6 files changed, 110 insertions(+), 25 deletions(-)
>>
>> diff --git a/cfg.mk b/cfg.mk
>> index 21f83c3..70612f8 100644
>> --- a/cfg.mk
>> +++ b/cfg.mk
>> @@ -1095,7 +1095,7 @@ exclude_file_name_regexp--sc_prohibit_asprintf = \
>>    ^(bootstrap.conf$$|src/util/virstring\.[ch]$$|tests/vircgroupmock\.c$$)
>>  
>>  exclude_file_name_regexp--sc_prohibit_strdup = \
>> -  ^(docs/|examples/|src/util/virstring\.c|tests/virnetserverclientmock.c$$)
>> +  ^(docs/|examples/|src/util/virstring\.c|tests/vir(netserverclient|cgroup)mock.c$$)
>>  
>>  exclude_file_name_regexp--sc_prohibit_close = \
>>    (\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/virfile\.c|src/libvirt-stream\.c|tests/vir(cgroup|pci)mock\.c)$$)
>> diff --git a/src/nodeinfo.c b/src/nodeinfo.c
>> index 3c22ebc..3a27c22 100644
>> --- a/src/nodeinfo.c
>> +++ b/src/nodeinfo.c
>> @@ -1242,6 +1242,23 @@ nodeGetCPUCount(void)
>>  }
>>  
>>  virBitmapPtr
>> +nodeGetPresentCPUBitmap(void)
>> +{
>> +    int max_present;
>> +
>> +    if ((max_present = nodeGetCPUCount()) < 0)
>> +        return NULL;
>> +
>> +#ifdef __linux__
>> +    if (virFileExists(SYSFS_SYSTEM_PATH "/cpu/present"))
>> +        return linuxParseCPUmap(max_present, SYSFS_SYSTEM_PATH "/cpu/present");
>> +#endif
>> +    virReportError(VIR_ERR_NO_SUPPORT, "%s",
>> +                   _("non-continuous host cpu numbers not implemented on this platform"));
>> +    return NULL;
>> +}
>> +
>> +virBitmapPtr
>>  nodeGetCPUBitmap(int *max_id ATTRIBUTE_UNUSED)
>>  {
> 
>>From my understanding the nodeGetPresentCPUBitmap() is no different than
> nodeGetCPUBitmap(). The latter can do everything that the former and
> more. Can we just use already existing function then?
> 

This functions checks the present CPUs, nodeGetCPUBitmap checks the online CPUs.

I don't think splitting their common part into another function would be more
readable - IMO the fact that both use linuxParseCPUmap should be enough.

Jan

> Otherwise looking good.
> 
> Michal
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150122/4d1b269f/attachment-0001.sig>


More information about the libvir-list mailing list