[libvirt] [PATCH 1/3] lxc: Implement pin emulator for container startup

Wang Rui moon.wangrui at huawei.com
Tue Oct 28 13:48:19 UTC 2014


On 2014/10/22 23:34, John Ferlan wrote:
> 
> 
> On 09/04/2014 03:52 AM, Wang Rui wrote:
>> From: Yue Wenyuan <yuewenyuan at huawei.com>
>>
>> This patch implements libvirt_lxc process pin with emulatorpin
>> specified in xml.
>>
>> Signed-off-by: Wang Rui <moon.wangrui at huawei.com>
>> Signed-off-by: Yue Wenyuan <yuewenyuan at huawei.com>
>> ---
>>  src/lxc/lxc_cgroup.c     | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  src/lxc/lxc_cgroup.h     |  4 +++
>>  src/lxc/lxc_controller.c |  4 +++
>>  3 files changed, 76 insertions(+)
>>
> 
> I'm not an LXC expert, but I'll give this a go since it's been sitting
> around a while.
> 
> I am curious why only the CPUSET (eg, <vcpuset ... cpuset="1-4,^3,6"> or
> <emulatorpin cpuset="1-3"/>) were handled and the <emulator_period> and
> <emulator_quota> were not?
> 
Hi, John. Thank you for your review.

These patches are only the implementation of emulator pin. It is ture
that <emulator_period> and <emulator_quota> are not supported by lxc. I
think It can be handled in the later patch if these patches are ACKed.

[...]
>> +{
>> +    int ret = -1;
>> +    char *mask = NULL;
>> +
>> +    if (def->placement_mode != VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
>> +        if (def->cputune.emulatorpin) {
>> +            if (!(mask = virBitmapFormat(def->cputune.emulatorpin->cpumask)))
>> +                return ret;
>> +        } else if (def->cpumask) {
>> +            if (!(mask = virBitmapFormat(def->cpumask)))
>> +                return ret;
>> +        }
> 
> At this point mask could still be NULL, thus you need a "if (mask && "
> prior to call...
> 
>> +        if (virCgroupSetCpusetCpus(cgroup, mask) < 0)
>> +            goto cleanup;
>> +    }
> 
> And if MODE_AUTO, then does virLXCControllerSetupCpuAffinity called
> prior to this function satisfy the doc requirement to query numad? If
> so, then perhaps noting that as a comment prior to this hunk of code
> would be beneficial. If not, then that needs to be handled. It doesn't
> seem that way since I don't see comparable code in LXC to the
> qemuPrepareCpumap code that handles the host.numaCell.

Thanks to point that. I think virLXCControllerGetNumadAdvice which is
called in virLXCControllerSetupResourceLimits is the comparable function
to qemuPrepareCpumap. Maybe it's another bug.


> Also since you're reusing 'mask' below you'll need a VIR_FREE(mask);
> prior to the next set of calls; otherwise, you'll leak it.
> 
>> +
>> +    if (virDomainNumatuneMaybeFormatNodeset(def->numatune, nodemask,
>> +                                            &mask, -1) < 0)
>> +        goto cleanup;
>> +
>> +    if (mask && virCgroupSetCpusetMems(cgroup, mask) < 0)
>> +        goto cleanup;
>> +
>> +    ret = 0;
>> +
>> + cleanup:
>> +    VIR_FREE(mask);
>> +    return ret;
>> +}
>> +
>> +int virLXCCgroupSetupForEmulator(virDomainDefPtr def,
>> +                      virCgroupPtr cgroup,
>> +                      virBitmapPtr nodemask)
> 
[...]
> Also the argument alignment is off - yes I see the previous function
> prototype is too, but lets at least do this one right and fix the other
> one later in either a follow up or separate patch prior to this patch.

Some code is not well aligned. I can fix that as your suggestion.

I'll send patches V2 after release 1.2.10.





More information about the libvir-list mailing list