Check sysinfo for Cpuset cpu.shares and blkio

Carried: #14015

If kernel is compiled with CONFIG_FAIR_GROUP_SCHED disabled cpu.shares
doesn't exist.
If kernel is compiled with CONFIG_CFQ_GROUP_IOSCHED disabled blkio.weight
doesn't exist.
If kernel is compiled with CONFIG_CPUSETS disabled cpuset won't be
supported.

We need to handle these conditions by checking sysinfo and verifying them.

Signed-off-by: Zefan Li <lizefan@huawei.com>
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
This commit is contained in:
Qiang Huang 2015-08-05 22:35:18 +08:00
parent 4c56c9f9ba
commit 3ed5407e61
2 changed files with 53 additions and 0 deletions

View file

@ -8,6 +8,8 @@ type SysInfo struct {
*cgroupMemInfo *cgroupMemInfo
*cgroupCPUInfo *cgroupCPUInfo
*cgroupBlkioInfo
*cgroupCpusetInfo
// Whether IPv4 forwarding is supported or not, if this was disabled, networking will not work // Whether IPv4 forwarding is supported or not, if this was disabled, networking will not work
IPv4ForwardingDisabled bool IPv4ForwardingDisabled bool
@ -37,9 +39,22 @@ type cgroupMemInfo struct {
} }
type cgroupCPUInfo struct { type cgroupCPUInfo struct {
// Whether CPU shares is supported or not
CPUShares bool
// Whether CPU CFS(Completely Fair Scheduler) period is supported or not // Whether CPU CFS(Completely Fair Scheduler) period is supported or not
CPUCfsPeriod bool CPUCfsPeriod bool
// Whether CPU CFS(Completely Fair Scheduler) quota is supported or not // Whether CPU CFS(Completely Fair Scheduler) quota is supported or not
CPUCfsQuota bool CPUCfsQuota bool
} }
type cgroupBlkioInfo struct {
// Whether Block IO weight is supported or not
BlkioWeight bool
}
type cgroupCpusetInfo struct {
// Whether Cpuset is supported or not
Cpuset bool
}

View file

@ -15,6 +15,8 @@ func New(quiet bool) *SysInfo {
sysInfo := &SysInfo{} sysInfo := &SysInfo{}
sysInfo.cgroupMemInfo = checkCgroupMem(quiet) sysInfo.cgroupMemInfo = checkCgroupMem(quiet)
sysInfo.cgroupCPUInfo = checkCgroupCPU(quiet) sysInfo.cgroupCPUInfo = checkCgroupCPU(quiet)
sysInfo.cgroupBlkioInfo = checkCgroupBlkioInfo(quiet)
sysInfo.cgroupCpusetInfo = checkCgroupCpusetInfo(quiet)
_, err := cgroups.FindCgroupMountpoint("devices") _, err := cgroups.FindCgroupMountpoint("devices")
sysInfo.CgroupDevicesEnabled = err == nil sysInfo.CgroupDevicesEnabled = err == nil
@ -68,6 +70,11 @@ func checkCgroupCPU(quiet bool) *cgroupCPUInfo {
return info return info
} }
info.CPUShares = cgroupEnabled(mountPoint, "cpu.shares")
if !quiet && !info.CPUShares {
logrus.Warn("Your kernel does not support cgroup cpu shares")
}
info.CPUCfsPeriod = cgroupEnabled(mountPoint, "cpu.cfs_period_us") info.CPUCfsPeriod = cgroupEnabled(mountPoint, "cpu.cfs_period_us")
if !quiet && !info.CPUCfsPeriod { if !quiet && !info.CPUCfsPeriod {
logrus.Warn("Your kernel does not support cgroup cfs period") logrus.Warn("Your kernel does not support cgroup cfs period")
@ -80,6 +87,37 @@ func checkCgroupCPU(quiet bool) *cgroupCPUInfo {
return info return info
} }
func checkCgroupBlkioInfo(quiet bool) *cgroupBlkioInfo {
info := &cgroupBlkioInfo{}
mountPoint, err := cgroups.FindCgroupMountpoint("blkio")
if err != nil {
if !quiet {
logrus.Warn(err)
}
return info
}
info.BlkioWeight = cgroupEnabled(mountPoint, "blkio.weight")
if !quiet && !info.BlkioWeight {
logrus.Warn("Your kernel does not support cgroup blkio weight")
}
return info
}
func checkCgroupCpusetInfo(quiet bool) *cgroupCpusetInfo {
info := &cgroupCpusetInfo{}
_, err := cgroups.FindCgroupMountpoint("cpuset")
if err != nil {
if !quiet {
logrus.Warn(err)
}
return info
}
info.Cpuset = true
return info
}
func cgroupEnabled(mountPoint, name string) bool { func cgroupEnabled(mountPoint, name string) bool {
_, err := os.Stat(path.Join(mountPoint, name)) _, err := os.Stat(path.Join(mountPoint, name))
return err == nil return err == nil