[libvirt] [PATCH V4] Expose resource control capabilites on cache bank

Martin Kletzander mkletzan at redhat.com
Tue Apr 11 08:10:08 UTC 2017


On Tue, Apr 11, 2017 at 09:48:54AM +0200, Peter Krempa wrote:
>On Tue, Apr 11, 2017 at 13:44:26 +0800, Eli Qiao wrote:
>> This patch is based on Martin's cache branch.
>>
>> * This patch amends the cache bank capability as follow:
>>
>> <cache>
>>   <bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'>
>>     <control min='768' unit='KiB' scope='BOTH' max_allocation='4'/>
>>   </bank>
>>   <bank id='1' level='3' type='unified' size='15360' unit='KiB' cpus='6-11'>
>>     <control min='768' unit='KiB' scope='BOTH' max_allocation='4'/>
>>   </bank>
>> </cache>
>>
>> For CDP enabled on x86 arch, we will have:
>> <cache>
>>   <bank id='0' level='3' type='unified' size='15360' unit='KiB' cpus='0-5'>
>>     <control min='768' unit='KiB' scope='CODE' max_allocation='4'/>
>>     <control min='768' unit='KiB' scope='DATA' max_allocation='4'/>
>>   </bank>
>> ...
>>
>> * Added a new testdata directory `linux-resctrl-cdp` to test CDP enabled
>> case.
>>
>> * Along with vircaps2xmltest case updated.
>>
>> P.S. here the scope is from /sys/fs/resctrl/info/L3{"" "CODE" "DATA"}, I
>> keep it capital upper as I need to use a macro to convert from enum to
>> string easily.
>
>We dont need to do that. The attributes should be lower case. The code
>can convert it to anything it needs.
>
>>
>> Signed-off-by: Eli Qiao <liyong.qiao at intel.com>
>> ---

[...]

>> diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
>> index 416dd1a..c6641d1 100644
>> --- a/src/conf/capabilities.c
>> +++ b/src/conf/capabilities.c

[...]

>> @@ -894,13 +898,38 @@ virCapabilitiesFormatCaches(virBufferPtr buf,
>>           */
>>          virBufferAsprintf(buf,
>>                            "<bank id='%u' level='%u' type='%s' "
>> -                          "size='%llu' unit='%s' cpus='%s'/>\n",
>> +                          "size='%llu' unit='%s' cpus='%s'",
>>                            bank->id, bank->level,
>>                            virCacheTypeToString(bank->type),
>>                            bank->size >> (kilos * 10),
>>                            kilos ? "KiB" : "B",
>>                            cpus_str);
>>
>> +        /* Format control */
>> +        virBufferAdjustIndent(&controlBuf, indent + 4);
>
>This looks wrong. You should increase/decrease the indent by some
>number. The old value should not be used.
>

This is used everywhere in the code with childrenBuf, it's pretty widely
used and I think readable as well.  I agree with the rest of the review,
though.

>> +        for (j = 0; j < bank->ncontrols; j++) {
>> +            bool min_kilos = !(bank->controls[j]->min % 1024);
>> +            virBufferAsprintf(&controlBuf,
>> +                              "<control min='%llu' unit='%s' "
>> +                              "scope='%s' max_allocation='%u'/>\n",
>> +                              bank->controls[j]->min >> (min_kilos * 10),
>> +                              min_kilos ? "KiB" : "B",
>> +                              virResctrlCacheTypeToString(bank->controls[j]->scope),
>> +                              bank->controls[j]->max_allocation);
>> +        }
>> +
>> +        /* Put it all together */
>
>You don't need to point out obvious things.
>
>> +        if (virBufferUse(&controlBuf)) {
>
>This logic looks weird and opaque. Can you decide by any other means
>than the filling of the buffer?
>

Same here.

>> +            virBufferAddLit(buf, ">\n");
>> +            virBufferAddBuffer(buf, &controlBuf);
>> +            virBufferAddLit(buf, "</bank>\n");
>> +
>> +        } else {
>> +            virBufferAddLit(buf, "/>\n");
>> +        }
>> +
>> +
>> +        virBufferFreeAndReset(&controlBuf);
>>          VIR_FREE(cpus_str);
>>      }
>>

[...]

>> diff --git a/tests/vircaps2xmltest.c b/tests/vircaps2xmltest.c
>> index f590249..db7de4c 100644
>> --- a/tests/vircaps2xmltest.c
>> +++ b/tests/vircaps2xmltest.c
>> @@ -58,6 +59,13 @@ test_virCapabilities(const void *opaque)
>>                      data->resctrl ? "/system" : "") < 0)
>>          goto cleanup;
>>
>> +    if (virAsprintf(&resctrl, "%s/vircaps2xmldata/linux-%s/resctrl",
>> +                    abs_srcdir,
>> +                    data->resctrl ? data->filename : "foo") < 0)
>
>"foo"? Some testing code leftover?
>

This should just be:

+    if (virAsprintf(&resctrl, "%s/vircaps2xmldata/linux-%s/resctrl",
+                    abs_srcdir, data->filename) < 0)

I think I said that in v3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170411/a443cc03/attachment-0001.sig>


More information about the libvir-list mailing list