[libvirt] [PATCH v4 1/4] qemu: vcpu: Aggregate code to set vCPU tuning
Ján Tomko
jtomko at redhat.com
Mon Feb 8 13:55:01 UTC 2016
On Mon, Feb 08, 2016 at 12:26:30PM +0100, Peter Krempa wrote:
> Rather than iterating 3 times for various settings this function
> aggregates all the code into single place. One of the other advantages
> is that it can then be reused for properly setting vCPU info on hotplug.
>
> With this approach autoCpuset is also used when setting the process
> affinity rather than just via cgroups.
> ---
> src/qemu/qemu_cgroup.c | 95 ----------------------
> src/qemu/qemu_cgroup.h | 1 -
> src/qemu/qemu_process.c | 212 ++++++++++++++++++++++++++++++++----------------
> src/qemu/qemu_process.h | 4 +
> 4 files changed, 148 insertions(+), 164 deletions(-)
>
> diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
> index 3cfc9e3..f3a9b5c 100644
> --- a/src/qemu/qemu_cgroup.c
> +++ b/src/qemu/qemu_cgroup.c
> @@ -1018,101 +1018,6 @@ qemuSetupCgroupCpusetCpus(virCgroupPtr cgroup,
> return ret;
> }
>
> -int
> -qemuSetupCgroupForVcpu(virDomainObjPtr vm)
> -{
> - virCgroupPtr cgroup_vcpu = NULL;
> - qemuDomainObjPrivatePtr priv = vm->privateData;
> - virDomainDefPtr def = vm->def;
> - size_t i;
> - unsigned long long period = vm->def->cputune.period;
> - long long quota = vm->def->cputune.quota;
> - char *mem_mask = NULL;
> - virDomainNumatuneMemMode mem_mode;
> -
> - if ((period || quota) &&
> - !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> - _("cgroup cpu is required for scheduler tuning"));
> - return -1;
> - }
> -
Before, this error was reported...
> - /*
> - * If CPU cgroup controller is not initialized here, then we need
> - * neither period nor quota settings. And if CPUSET controller is
> - * not initialized either, then there's nothing to do anyway. CPU pinning
> - * will be set via virProcessSetAffinity.
> - */
> - if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU) &&
> - !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPUSET))
> - return 0;
> -
> - /* If vCPU<->pid mapping is missing we can't do vCPU pinning */
> - if (!qemuDomainHasVcpuPids(vm))
> - return 0;
... before the VCPU pid check here.
> -
> - if (virDomainNumatuneGetMode(vm->def->numa, -1, &mem_mode) == 0 &&
> - mem_mode == VIR_DOMAIN_NUMATUNE_MEM_STRICT &&
> - virDomainNumatuneMaybeFormatNodeset(vm->def->numa,
> - priv->autoNodeset,
> - &mem_mask, -1) < 0)
> /**
> + * qemuProcessSetupVcpu:
> + * @vm: domain object
> + * @vcpuid: id of VCPU to set defaults
> + *
> + * This function sets resource properities (affinity, cgroups, scheduler) for a
*properties.
Also, cgroups, affinity, scheduler is the order.
> + * vCPU. This function expects that the vCPU is online and the vCPU pids were
> + * correctly detected at the point when it's called.
> + *
> + * Returns 0 on success, -1 on error.
> + */
> +int
> +qemuProcessSetupVcpu(virDomainObjPtr vm,
> + unsigned int vcpuid)
> +{
> + pid_t vcpupid = qemuDomainGetVcpuPid(vm, vcpuid);
> + virDomainVcpuInfoPtr vcpu = virDomainDefGetVcpu(vm->def, vcpuid);
> + qemuDomainObjPrivatePtr priv = vm->privateData;
> + char *mem_mask = NULL;
> + virDomainNumatuneMemMode mem_mode;
> + unsigned long long period = vm->def->cputune.period;
> + long long quota = vm->def->cputune.quota;
> + virCgroupPtr cgroup_vcpu = NULL;
> + virBitmapPtr cpumask;
> + int ret = -1;
> +
> + if ((period || quota) &&
> + !virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("cgroup cpu is required for scheduler tuning"));
> + goto cleanup;
> + }
> +
This error won't be displayed if the domain has no VCPU pids.
ACK if you move it to the caller.
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160208/3273d8dc/attachment-0001.sig>
More information about the libvir-list
mailing list