[libvirt] [PATCH] Get thread and socket information in virsh nodeinfo.

Chris Lalancette clalance at redhat.com
Tue Mar 9 13:59:53 UTC 2010


On 03/08/2010 07:19 PM, Eric Blake wrote:
> On 03/05/2010 12:06 PM, Chris Lalancette wrote:
>> +#define CPU_SYS_PATH "/sys/devices/system/cpu"
>>  
>> +    if (virAsprintf(&path, "%s/cpu%d/topology/thread_siblings", CPU_SYS_PATH,
>> +                    cpu) < 0) {
> 
> Where is the documentation about what this file will contain?  On my
> system, I see:
> 
> $ cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
> 0
> $ cat /sys/devices/system/cpu/cpu0/topology/thread_siblings
> 00000001
> $ cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
> 1
> $ cat /sys/devices/system/cpu/cpu1/topology/thread_siblings
> 00000002
> 
> That is, I'm guessing that topology/thread_siblings_list is
> human-readable, while topology/thread_siblings is a hex bitmask.  If it
> is indeed a 32-bit mask, then:

Actually, it's a much longer than 32-bit bit mask.  On my RHEL-5 system,
it looks like:

00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000002

(the commas are just to split it up visually; think of that above as
one huge bitmask)

> 
>> +    if (fgets(str, sizeof(str), pathfp) == NULL) {
>> +        virReportSystemError(errno, _("cannot read from %s"), path);
>> +        goto cleanup;
>> +    }
>> +
>> +    i = 0;
>> +    while (str[i] != '\0') {
>> +        if (str[i] != '\n' && str[i] != ',')
>> +            ret += count_one_bits(str[i] - '0');
>> +        i++;
>> +    }
> 
> ...this loop is borked, since it is assuming that str[i] will be a
> digit, and is not looking for a-f.  And why skipping comma?  Shouldn't
> this instead be parsing the entire file contents as a single int, and
> only then calling count_one_bits once on the result?

So skipping the comma is correct here.  You are right, though, that this
is wrong for hex.  For some reason I confused myself and thought the above
was binary, not hex.  I'll send a follow-up patch.

Thanks,
-- 
Chris Lalancette




More information about the libvir-list mailing list