[libvirt] [PATCH v3 4/6] qemu: Implement period and quota tunable XML configuration and parsing
Wen Congyang
wency at cn.fujitsu.com
Tue Jul 19 00:51:58 UTC 2011
At 07/19/2011 04:59 AM, Adam Litke Write:
>
>
> On 07/18/2011 04:42 AM, Wen Congyang wrote:
>> +int qemuSetupCgroupForVcpu(struct qemud_driver *driver, virDomainObjPtr vm)
>> +{
>> + virCgroupPtr cgroup = NULL;
>> + virCgroupPtr cgroup_vcpu = NULL;
>> + qemuDomainObjPrivatePtr priv = vm->privateData;
>> + int rc;
>> + unsigned int i;
>> + unsigned long long period = vm->def->cputune.period;
>> + long long quota = vm->def->cputune.quota;
>> +
>> + if (driver->cgroup == NULL)
>> + return 0; /* Not supported, so claim success */
>> +
>> + rc = virCgroupForDomain(driver->cgroup, vm->def->name, &cgroup, 0);
>> + if (rc != 0) {
>> + virReportSystemError(-rc,
>> + _("Unable to find cgroup for %s"),
>> + vm->def->name);
>> + goto cleanup;
>> + }
>> +
>> + if (priv->nvcpupids == 0 || priv->vcpupids[0] == vm->pid) {
>> + /* If we does not know VCPU<->PID mapping or all vcpu runs in the same
>> + * thread, we can not control each vcpu.
>> + */
>> + if (period || quota) {
>> + if (qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU)) {
>> + if (qemuSetupCgroupVcpuBW(cgroup, period, quota) < 0)
>> + goto cleanup;
>> + }
>> + }
>> + return 0;
>> + }
>
> I found a problem above. In the case where we are controlling quota at
> the domain level cgroup we must multiply the user-specified quota by the
> number of vcpus in the domain in order to get the same performance as we
> would with per-vcpu cgroups. As written, the vm will be essentially
> capped at 1 vcpu worth of quota regardless of the number of vcpus. You
> will also have to apply this logic in reverse when reporting the
> scheduler statistics so that the quota number is a per-vcpu quantity.
When quota is 1000, and per-vcpu thread is not active, we can start
vm successfully. When the per-vcpu thread is active, and the num of
vcpu is more than 1, we can not start vm if we multiply the user-specified
quota. It will confuse the user: sometimes the vm can be started, but
sometimes the vm can not be started with the same configuration.
>
>
More information about the libvir-list
mailing list