[libvirt] [PATCHv7 12/18] conf: Introduce cache monitor element in cachetune

Huaqiang,Wang huaqiang.wang at intel.com
Tue Nov 6 10:02:20 UTC 2018



On 2018年11月06日 01:26, John Ferlan wrote:
>
> On 10/22/18 4:01 AM, Wang Huaqiang wrote:
>> Introducing <monitor> element under <cachetune> to represent
>> a cache monitor.
>>
>> Signed-off-by: Wang Huaqiang <huaqiang.wang at intel.com>
>> ---
>>   docs/formatdomain.html.in                          |  26 +++
>>   docs/schemas/domaincommon.rng                      |  10 +
>>   src/conf/domain_conf.c                             | 234 ++++++++++++++++++++-
>>   src/conf/domain_conf.h                             |  11 +
>>   tests/genericxml2xmlindata/cachetune-cdp.xml       |   3 +
>>   .../cachetune-colliding-monitor.xml                |  30 +++
>>   tests/genericxml2xmlindata/cachetune-small.xml     |   7 +
>>   tests/genericxml2xmltest.c                         |   2 +
>>   8 files changed, 322 insertions(+), 1 deletion(-)
>>   create mode 100644 tests/genericxml2xmlindata/cachetune-colliding-monitor.xml
>>
>> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
>> index b1651e3..2fd665c 100644
>> --- a/docs/formatdomain.html.in
>> +++ b/docs/formatdomain.html.in
>> @@ -759,6 +759,12 @@
>>       <cachetune vcpus='0-3'>
>>         <cache id='0' level='3' type='both' size='3' unit='MiB'/>
>>         <cache id='1' level='3' type='both' size='3' unit='MiB'/>
>> +      <monitor level='3' vcpus='1'/>
>> +      <monitor level='3' vcpus='0-3'/>
>> +    </cachetune>
>> +    <cachetune vcpus='4-5'>
>> +      <monitor level='3' vcpus='4'/>
>> +      <monitor level='3' vcpus='5'/>
>>       </cachetune>
>>       <memorytune vcpus='0-3'>
>>         <node id='0' bandwidth='60'/>
>> @@ -978,6 +984,26 @@
>>                 </dd>
>>               </dl>
>>             </dd>
>> +          <dt><code>monitor</code></dt>
>> +          <dd>
>> +            The optional element <code>monitor</code> creates the cache
>> +            monitor(s) for current cache allocation and has the following
>> +            required attributes:
>> +            <dl>
>> +              <dt><code>level</code></dt>
>> +              <dd>
>> +                Host cache level the monitor belongs to.
>> +              </dd>
>> +              <dt><code>vcpus</code></dt>
>> +              <dd>
>> +                vCPU list the monitor applies to. A monitor's vCPU list
>> +                can only be the member(s) of the vCPU list of associating
> the associated

Thanks.

>
>> +                allocation. The default monitor has the same vCPU list as the
>> +                associating allocation. For non-default monitors, there
> associated

Thanks.

>
>> +                are no vCPU overlap permitted.
> For non-default monitors, overlapping vCPUs are not permitted.

Thanks.

>
>> +              </dd>
>> +            </dl>
>> +          </dd>
>>           </dl>
>>         </dd>
>>   
> [...]
>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index a068d4d..01f795f 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -2955,13 +2955,31 @@ virDomainLoaderDefFree(virDomainLoaderDefPtr loader)
>>   
>>   
> [...]
>
>> @@ -19026,7 +19215,14 @@ virDomainCachetuneDefParse(virDomainDefPtr def,
>>       if (!resctrl)
>>           goto cleanup;
>>   
>> -    if (virResctrlAllocIsEmpty(alloc)) {
>> +    if (virDomainResctrlMonDefParse(def, ctxt, node,
>> +                                    VIR_RESCTRL_MONITOR_TYPE_CACHE,
>> +                                    resctrl) < 0)
>> +        goto cleanup;
>> +
>> +    /* If no <cache> element or <monitor> element in <cachetune>, do not
>> +     * append any resctrl element */
>> +    if (virResctrlAllocIsEmpty(alloc) && !resctrl->nmonitors) {
> Swap order since *IsEmpty is more compute intensive, also change to:
>
>     if (resctrl->nmonitors == 0 &&
>

Agree.

>>           ret = 0;
>>           goto cleanup;
>>       }
>> @@ -27063,12 +27259,41 @@ virDomainCachetuneDefFormatHelper(unsigned int level,
>>   
>>   
>>   static int
>> +virDomainResctrlMonDefFormatHelper(virDomainResctrlMonDefPtr domresmon,
>> +                                   virResctrlMonitorType tag,
>> +                                   virBufferPtr buf)
>> +{
>> +    char *vcpus = NULL;
>> +
>> +    if (domresmon->tag != tag)
>> +        return 0;
>> +
>> +    virBufferAddLit(buf, "<monitor ");
>> +
>> +    if (tag == VIR_RESCTRL_MONITOR_TYPE_CACHE) {
>> +        virBufferAsprintf(buf, "level='%u' ",
>> +                          VIR_DOMAIN_RESCTRL_MONITOR_CACHELEVEL);
>> +    }
> So is this because when <memtune> is introduced it won't use a cache
> level, right? Just trying to recall (and perhaps add a comment).

Yes. 'level' is just for cachetune monitor.  Planned to add the comment when
extending this function to support memtune monitor, mentioning the memtune
monitor ( tag == VIR_RESCTRL_MONITOR_TYPE_BW) here will cause confusing.

>
>> +
>> +    vcpus = virBitmapFormat(domresmon->vcpus);
>> +    if (!vcpus)
>> +        return -1;
>> +
>> +    virBufferAsprintf(buf, "vcpus='%s'/>\n", vcpus);
>> +
>> +    VIR_FREE(vcpus);
>> +    return 0;
>> +}
>> +
>> +
> [...]
>
> I can fix the minor nits, just ack them...

Thanks please help fix.
>
> Reviewed-by: John Ferlan <jferlan at redhat.com>
>
> John

Thanks for fixing and the review, I will make changes in my code.

Huaqiang




More information about the libvir-list mailing list