[libvirt] [PATCH RESEND RFC v4 2/6] cgroup: Implement cpu.cfs_period_us and cpu.cfs_quota_us tuning API
Daniel Veillard
veillard at redhat.com
Thu Jul 21 04:06:54 UTC 2011
Plase add a small comment before commit
On Thu, Jul 21, 2011 at 10:08:47AM +0800, Wen Congyang wrote:
> ---
> src/libvirt_private.syms | 4 ++
> src/util/cgroup.c | 81 ++++++++++++++++++++++++++++++++++++++++++++--
> src/util/cgroup.h | 6 +++
> 3 files changed, 88 insertions(+), 3 deletions(-)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 30804eb..8b73ec3 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -71,6 +71,8 @@ virCgroupForVcpu;
> virCgroupFree;
> virCgroupGetBlkioWeight;
> virCgroupGetCpuShares;
> +virCgroupGetCpuCfsPeriod;
> +virCgroupGetCpuCfsQuota;
> virCgroupGetCpuacctUsage;
> virCgroupGetFreezerState;
> virCgroupGetMemoryHardLimit;
> @@ -85,6 +87,8 @@ virCgroupPathOfController;
> virCgroupRemove;
> virCgroupSetBlkioWeight;
> virCgroupSetCpuShares;
> +virCgroupSetCpuCfsPeriod;
> +virCgroupSetCpuCfsQuota;
> virCgroupSetFreezerState;
> virCgroupSetMemory;
> virCgroupSetMemoryHardLimit;
> diff --git a/src/util/cgroup.c b/src/util/cgroup.c
> index 8994aca..378e08a 100644
> --- a/src/util/cgroup.c
> +++ b/src/util/cgroup.c
> @@ -398,8 +398,6 @@ static int virCgroupSetValueI64(virCgroupPtr group,
> return rc;
> }
>
> -#if 0
> -/* This is included for completeness, but not yet used */
> static int virCgroupGetValueI64(virCgroupPtr group,
> int controller,
> const char *key,
> @@ -419,7 +417,6 @@ out:
>
> return rc;
> }
> -#endif
>
> static int virCgroupGetValueU64(virCgroupPtr group,
> int controller,
> @@ -1384,6 +1381,84 @@ int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares)
> "cpu.shares", shares);
> }
>
> +/**
> + * virCgroupSetCpuCfsPeriod:
> + *
> + * @group: The cgroup to change cpu.cfs_period_us for
> + * @cfs_period: The bandwidth period in usecs
> + *
> + * Returns: 0 on success
> + */
> +int virCgroupSetCpuCfsPeriod(virCgroupPtr group, unsigned long long cfs_period)
> +{
> + /* The cfs_period shoule be greater or equal than 1ms, and less or equal
> + * than 1s.
> + */
> + if (cfs_period < 1000 || cfs_period > 1000000)
> + return -EINVAL;
> +
> + return virCgroupSetValueU64(group,
> + VIR_CGROUP_CONTROLLER_CPU,
> + "cpu.cfs_period_us", cfs_period);
> +}
> +
> +/**
> + * virCgroupGetCpuCfsPeriod:
> + *
> + * @group: The cgroup to get cpu.cfs_period_us for
> + * @cfs_period: Pointer to the returned bandwidth period in usecs
> + *
> + * Returns: 0 on success
> + */
> +int virCgroupGetCpuCfsPeriod(virCgroupPtr group, unsigned long long *cfs_period)
> +{
> + return virCgroupGetValueU64(group,
> + VIR_CGROUP_CONTROLLER_CPU,
> + "cpu.cfs_period_us", cfs_period);
> +}
> +
> +/**
> + * virCgroupSetCpuCfsQuota:
> + *
> + * @group: The cgroup to change cpu.cfs_quota_us for
> + * @cfs_quota: the cpu bandwidth (in usecs) that this tg will be allowed to
> + * consume over period
> + *
> + * Returns: 0 on success
> + */
> +int virCgroupSetCpuCfsQuota(virCgroupPtr group, long long cfs_quota)
> +{
> + if (cfs_quota >= 0) {
> + /* The cfs_quota shoule be greater or equal than 1ms */
> + if (cfs_quota < 1000)
> + return -EINVAL;
> +
> + /* check overflow */
> + if (cfs_quota > (unsigned long long)~0ULL / 1000)
> + return -EINVAL;
> + }
> +
> + return virCgroupSetValueI64(group,
> + VIR_CGROUP_CONTROLLER_CPU,
> + "cpu.cfs_quota_us", cfs_quota);
> +}
> +
> +/**
> + * virCgroupGetCpuCfsQuota:
> + *
> + * @group: The cgroup to get cpu.cfs_quota_us for
> + * @cfs_quota: Pointer to the returned cpu bandwidth (in usecs) that this tg
> + * will be allowed to consume over period
> + *
> + * Returns: 0 on success
> + */
> +int virCgroupGetCpuCfsQuota(virCgroupPtr group, long long *cfs_quota)
> +{
> + return virCgroupGetValueI64(group,
> + VIR_CGROUP_CONTROLLER_CPU,
> + "cpu.cfs_quota_us", cfs_quota);
> +}
> +
> int virCgroupGetCpuacctUsage(virCgroupPtr group, unsigned long long *usage)
> {
> return virCgroupGetValueU64(group,
> diff --git a/src/util/cgroup.h b/src/util/cgroup.h
> index 1d04418..d190bb3 100644
> --- a/src/util/cgroup.h
> +++ b/src/util/cgroup.h
> @@ -104,6 +104,12 @@ int virCgroupDenyDevicePath(virCgroupPtr group,
> int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares);
> int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares);
>
> +int virCgroupSetCpuCfsPeriod(virCgroupPtr group, unsigned long long cfs_period);
> +int virCgroupGetCpuCfsPeriod(virCgroupPtr group, unsigned long long *cfs_period);
> +
> +int virCgroupSetCpuCfsQuota(virCgroupPtr group, long long cfs_quota);
> +int virCgroupGetCpuCfsQuota(virCgroupPtr group, long long *cfs_quota);
> +
> int virCgroupGetCpuacctUsage(virCgroupPtr group, unsigned long long *usage);
>
> int virCgroupSetFreezerState(virCgroupPtr group, const char *state);
Okay, the check for overflow could probably be done with some kind
of MAX_INT but for ULL , but that sounds right too,
ACK
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list