[libvirt] [PATCH 06/10] vcpubandwidth: introduce two new libvirt APIs
Wen Congyang
wency at cn.fujitsu.com
Fri Jul 1 03:02:24 UTC 2011
At 06/30/2011 11:13 AM, Wen Congyang Write:
> We want to control bandwidth for each vcpu, so we can not use the
> API virDomainSetSchedulerParameters(). Introduce two new APIs to
> change and query bandwidth for each vcpu.
>
> +
> +/**
> + * virDomainSetVcpuBW:
> + * @domain: pointer to domain object
> + * @params: pointer to vcpu bandwidth objects
another typo error:
s/params/vcpubw/
> + * @nparams: number of vcpu bandwidth objects
s/nparams/nvcpubw/
> + * (this value can be the same or less than domain's vcpu num)
> + * @flags: bitwise-OR of virDomainModificationImpact
> + *
> + * Change a subset or all vcpu bandwidth. The value of @flags
> + * should be either VIR_DOMAIN_AFFECT_CURRENT, or a bitwise-or of
> + * values from VIR_DOMAIN_AFFECT_LIVE and VIR_DOMAIN_AFFECT_CONFIG,
> + * although hypervisors vary in which flags are supported.
> + *
> + * Returns -1 in case of error, 0 in case of success.
> + */
> +int
> +virDomainSetVcpuBW(virDomainPtr domain, virDomainVcpuBWDefPtr vcpubw,
> + int nvcpu, unsigned int flags)
> +{
> + virConnectPtr conn;
> +
> + VIR_DOMAIN_DEBUG(domain, "vcpubw=%p, nvcpu=%d, flags=%u",
> + vcpubw, nvcpu, flags);
> +
> + virResetLastError();
> +
> + if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
> + virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
> + virDispatchError(NULL);
> + return -1;
> + }
> +
> + if (vcpubw == NULL || nvcpu < 0) {
> + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> + goto error;
> + }
> +
> + if (domain->conn->flags & VIR_CONNECT_RO) {
> + virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
> + goto error;
> + }
> + conn = domain->conn;
> +
> + if (conn->driver->domainSetVcpuBW) {
> + int ret;
> + ret = conn->driver->domainSetVcpuBW(domain, vcpubw, nvcpu, flags);
> + if (ret < 0)
> + goto error;
> + return ret;
> + }
> +
> + virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +
> +error:
> + virDispatchError(domain->conn);
> + return -1;
> +}
> +
>
> /**
> * virDomainBlockStats:
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index 5f2541a..d4f80a6 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -466,4 +466,10 @@ LIBVIRT_0.9.3 {
> virNodeGetMemoryStats;
> } LIBVIRT_0.9.2;
>
> +LIBVIRT_0.9.4 {
> + global:
> + virDomainGetVcpuBW;
> + virDomainSetVcpuBW;
> +} LIBVIRT_0.9.3;
> +
> # .... define new API here using predicted next version number ....
More information about the libvir-list
mailing list