[libvirt] [PATCHv3] conf: Add the cpu duplicate use check for vm numa settings

Luyao Huang lhuang at redhat.com
Tue May 5 13:06:28 UTC 2015


On 05/05/2015 07:35 PM, Michal Privoznik wrote:
> On 05.05.2015 12:13, Luyao Huang wrote:
>> https://bugzilla.redhat.com/show_bug.cgi?id=1176020
>>
>> We had a check for the vcpu count total number in <numa>
>> before, however this check is not good enough. There are
>> some examples:
>>
>> 1. one of cpu id is out of maxvcpus, can set success(cpu count = 5 < 10):
>>
>> <vcpu placement='static'>10</vcpu>
>> <cell id='0' cpus='0-3,100' memory='512000' unit='KiB'/>
>>
>> 2. use the same cpu in 2 cell, can set success(cpu count = 8 < 10):
>> <vcpu placement='static'>10</vcpu>
>> <cell id='0' cpus='0-3' memory='512000' unit='KiB'/>
>> <cell id='1' cpus='0-3' memory='512000' unit='KiB'/>
>>
>> 3. use the same cpu in 2 cell, cannot set success(cpu count = 11 > 10):
>> <vcpu placement='static'>10</vcpu>
>> <cell id='0' cpus='0-6' memory='512000' unit='KiB'/>
>> <cell id='1' cpus='0-3' memory='512000' unit='KiB'/>
>>
>> Add a check for numa cpus, check if duplicate use one cpu in more
>> than one cell.
>>
>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>> ---
>> v3: remove the max vcpu check, just add a check when
>> parse the numa settings, and change the subject.
>>
>>   src/conf/numa_conf.c | 9 +++++++++
>>   1 file changed, 9 insertions(+)
>>
>> diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
>> index 7ad3f66..e25d7a8 100644
>> --- a/src/conf/numa_conf.c
>> +++ b/src/conf/numa_conf.c
>> @@ -738,6 +738,15 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
>>           }
>>           VIR_FREE(tmp);
>>   
>> +        for (j = 0; j < i; j++) {
>> +            if (virBitmapOverlaps(def->mem_nodes[j].cpumask,
>> +                                  def->mem_nodes[i].cpumask)) {
>> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                               _("NUMA cells %zu and %zu have overlapping vCPU ids"), i, j);
>> +                goto cleanup;
>> +            }
>> +        }
>> +
>>           ctxt->node = nodes[i];
>>           if (virDomainParseMemory("./@memory", "./@unit", ctxt,
>>                                    &def->mem_nodes[cur_cell].mem, true, false) < 0)
>>
> Even though this does not compile, I'm squashing in the obvious fix,
> ACKing and pushing.

Thanks for your quick review !

> Michal

Luyao




More information about the libvir-list mailing list