
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 ....