提交 fd7c1723 编写于 作者: W Wen Congyang

cgroup: Implement cpu.cfs_period_us and cpu.cfs_quota_us tuning API

This patch provides 4 APIs to get and set cpu.cfs_period_us and cpu.cfs_quota_us.
上级 8e64f873
...@@ -71,6 +71,8 @@ virCgroupForVcpu; ...@@ -71,6 +71,8 @@ virCgroupForVcpu;
virCgroupFree; virCgroupFree;
virCgroupGetBlkioWeight; virCgroupGetBlkioWeight;
virCgroupGetCpuShares; virCgroupGetCpuShares;
virCgroupGetCpuCfsPeriod;
virCgroupGetCpuCfsQuota;
virCgroupGetCpuacctUsage; virCgroupGetCpuacctUsage;
virCgroupGetFreezerState; virCgroupGetFreezerState;
virCgroupGetMemoryHardLimit; virCgroupGetMemoryHardLimit;
...@@ -85,6 +87,8 @@ virCgroupPathOfController; ...@@ -85,6 +87,8 @@ virCgroupPathOfController;
virCgroupRemove; virCgroupRemove;
virCgroupSetBlkioWeight; virCgroupSetBlkioWeight;
virCgroupSetCpuShares; virCgroupSetCpuShares;
virCgroupSetCpuCfsPeriod;
virCgroupSetCpuCfsQuota;
virCgroupSetFreezerState; virCgroupSetFreezerState;
virCgroupSetMemory; virCgroupSetMemory;
virCgroupSetMemoryHardLimit; virCgroupSetMemoryHardLimit;
......
...@@ -398,8 +398,6 @@ static int virCgroupSetValueI64(virCgroupPtr group, ...@@ -398,8 +398,6 @@ static int virCgroupSetValueI64(virCgroupPtr group,
return rc; return rc;
} }
#if 0
/* This is included for completeness, but not yet used */
static int virCgroupGetValueI64(virCgroupPtr group, static int virCgroupGetValueI64(virCgroupPtr group,
int controller, int controller,
const char *key, const char *key,
...@@ -419,7 +417,6 @@ out: ...@@ -419,7 +417,6 @@ out:
return rc; return rc;
} }
#endif
static int virCgroupGetValueU64(virCgroupPtr group, static int virCgroupGetValueU64(virCgroupPtr group,
int controller, int controller,
...@@ -1384,6 +1381,84 @@ int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares) ...@@ -1384,6 +1381,84 @@ int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares)
"cpu.shares", 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 > ULLONG_MAX / 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) int virCgroupGetCpuacctUsage(virCgroupPtr group, unsigned long long *usage)
{ {
return virCgroupGetValueU64(group, return virCgroupGetValueU64(group,
......
...@@ -104,6 +104,12 @@ int virCgroupDenyDevicePath(virCgroupPtr group, ...@@ -104,6 +104,12 @@ int virCgroupDenyDevicePath(virCgroupPtr group,
int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares); int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares);
int virCgroupGetCpuShares(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 virCgroupGetCpuacctUsage(virCgroupPtr group, unsigned long long *usage);
int virCgroupSetFreezerState(virCgroupPtr group, const char *state); int virCgroupSetFreezerState(virCgroupPtr group, const char *state);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册